2010-06-25 148 views
12

我對MATLAB非常陌生,我試圖顯示一些計算的實時繪圖。我有一個N大小的向量,我一次使用m值(比如說m = N/4),所以我想繪製第一個m值,然後第二個m值計算出來,讓它們替換第一個繪圖。MATLAB中的實時繪圖

我的方法如下:

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

,但它不能更新在每一個循環,等待劇情的所有循環來完成繪製數據。我的問題是:我應該使用另一個函數而不是plot或者我可以在每個循環中添加一些延遲?

我認爲必須有一種方法,我不知道更新的情節,而不是每次重新繪製它。

+0

相關:https://stackoverflow.com/questions/13102654/how-should-i-update-the-data-of-a-plot-in-matlab – 2017-09-24 13:24:39

回答

11

您可以添加致電DRAWNOW強制更新圖。請參閱reference page。請注意,DRAWNOW會導致圖形事件隊列被刷新,這可能會導致執行回調等。

+0

現在已經有一段時間了,但你可能想要看看並使用doublebuffering。我不記得在哪裏設置這個選項 - 但它確實在當時有所作爲:) – Chau 2010-06-25 06:45:32

+2

雙緩衝是圖的屬性 - 「set(gcf,'DoubleBuffer','on')」或類似的。也可以幫忙,但你需要一個DRAWNOW來強制更新。 – Edric 2010-06-25 07:45:35

+0

確實我錯過了drawnow命令。非常感謝。 – kirbuchi 2010-06-25 17:47:38

29

作爲Edric mentioned,在調用plot之後,您肯定會想要包含一個drawnow命令來強制更新圖形。然而,對於每次不涉及重新創建整個地塊的地塊,都有一種更有效率和更流暢的方法。您可以簡單地初始化繪圖,將handle捕獲到繪圖對象,然後使用set命令修改循環中該對象的屬性。這裏有一個例子:

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 

此外,你的循環之前和調用plot後,你可以設置一些axes properties,像axes limits等,如果您希望軸保持固定,並不會改變其外觀與繪製的每個新矢量m

+0

謝謝,這個伎倆!你和Edric的解決方案都很好。但如果我按照自己的方式來做,它不會每次都重新繪製。 – kirbuchi 2010-06-25 17:46:03

+0

@kirbuchi爲什麼這不是公認的答案? – vvy 2014-02-22 07:39:58

+0

@ vvy自從它第一次來我接受了另一個,幫助我解決了我的問題,但是後來我意識到這個更好。我猜得票數可以說明一切。 – kirbuchi 2014-02-22 18:34:35