2010-06-25 48 views
12

Tôi rất mới đối với MATLAB và tôi đang cố gắng hiển thị một âm mưu thời gian thực của một số phép tính. Tôi có một vector có kích thước N và tôi làm việc với m giá trị tại một thời điểm (giả sử m = N/4), vì vậy tôi muốn vẽ giá trị m đầu tiên và sau đó ngay sau khi giá trị thứ hai là m được tính toán thay thế ô đầu tiên.Âm mưu thời gian thực trong MATLAB

cách tiếp cận của tôi là như sau:

for i=1:N, 
    ... 
    //compute m 
    ... 
    plot(m); 
end; 

nhưng nó thất bại trong việc cập nhật những âm mưu trong mỗi vòng lặp và chờ đợi cho tất cả các vòng đến cuối để âm mưu dữ liệu. Câu hỏi của tôi là: Tôi có nên sử dụng chức năng khác thay vì plot hoặc tôi có thể thêm một số độ trễ trong mỗi vòng lặp không?

Tôi nghĩ rằng phải có một cách mà tôi không biết về việc cập nhật cốt truyện thay vì vẽ lại nó mỗi lần.

+0

Related: https://stackoverflow.com/questions/13102654/how-should-i-update-the-data-of-a-plot-in-matlab –

Trả lời

11

Bạn có thể thêm cuộc gọi tới DRAWNOW để buộc âm mưu cập nhật. Xem reference page. Lưu ý rằng DRAWNOW làm cho hàng đợi sự kiện đồ họa bị xóa, điều này có thể làm cho các cuộc gọi lại được thực thi.

+0

Đã lâu rồi, nhưng bạn có thể muốn để xem xét và sử dụng doublebuffering. Tôi không nhớ nơi đặt tùy chọn đó - nhưng chắc chắn đã tạo sự khác biệt tại thời điểm đó :) – Chau

+2

Đệm đôi là thuộc tính của hình - "set (gcf, 'DoubleBuffer', 'on')" hoặc tương tự. Có thể giúp quá, nhưng bạn cần một DRAWNOW để ép buộc cập nhật. – Edric

+0

Thực ra tôi đã thiếu lệnh rút thăm. Cảm ơn rất nhiều. – kirbuchi

29

Edric mentioned, chắc chắn bạn sẽ muốn bao gồm lệnh drawnow sau khi gọi tới plot để buộc cập nhật đồ họa. Tuy nhiên, có một phương pháp hiệu quả hơn và mượt mà hơn để tạo hiệu ứng các ô không liên quan đến việc tái tạo toàn bộ ô mỗi lần. Bạn chỉ có thể khởi tạo cốt truyện của mình, chụp một đối tượng lôgic handle, sau đó sửa đổi các thuộc tính của đối tượng đó trong vòng lặp của bạn bằng cách sử dụng lệnh set. Dưới đây là một ví dụ:

hLine = plot(nan);   % Initialize a plot line (which isn't displayed yet 
          % because the values are NaN) 
for i = 1:N    % Loop N times 
    ... 
    % Compute m here 
    ... 
    set(hLine, 'YData', m); % Update the y data of the line 
    drawnow     % Force the graphics to update immediately 
end 

Bên cạnh đó, trước khi vòng lặp của bạn và sau khi cuộc gọi đến plot bạn có thể đặt một số axes properties, giống như axes limits, vv, nếu bạn muốn các trục để duy trì cố định và không thay đổi của họ xuất hiện với mỗi vector mới m được vẽ.

+0

Cảm ơn, điều đó đã xảy ra! Cả bạn và giải pháp của Edric đều hoạt động rất tốt. Nhưng nếu tôi làm theo cách của bạn, nó sẽ không phải thay thế mọi lúc. – kirbuchi

+0

@kirbuchi Tại sao đây không phải là câu trả lời được chấp nhận? – vvy

+0

@vvy Tôi chấp nhận cái khác vì nó đến trước và giúp tôi giải quyết vấn đề của mình, nhưng sau đó tôi nhận ra điều này là tốt hơn. Tôi đoán số phiếu bầu cho chính nó. – kirbuchi

Các vấn đề liên quan