快速繪圖
順序繪圖或動畫有三種主要方式:plot(x,y)
,set(h , 'XData' , y, 'YData' , y)
和 animatedline
。如果你希望動畫平滑,則需要高效繪圖,這三種方法並不相同。
% Plot a sin with increasing phase shift in 500 steps
x = linspace(0 , 2*pi , 100);
figure
tic
for thetha = linspace(0 , 10*pi , 500)
y = sin(x + thetha);
plot(x,y)
drawnow
end
toc
我得到了 5.278172 seconds
。繪圖函式基本上每次都刪除並重新建立線物件。更新繪圖的更有效方法是使用 Line
物件的 XData
和 YData
屬性。
tic
h = []; % Handle of line object
for thetha = linspace(0 , 10*pi , 500)
y = sin(x + thetha);
if isempty(h)
% If Line still does not exist, create it
h = plot(x,y);
else
% If Line exists, update it
set(h , 'YData' , y)
end
drawnow
end
toc
現在我得到 2.741996 seconds
,好多了!
animatedline
是一個相對較新的功能,於 2014b 推出。讓我們看看它的票價:
tic
h = animatedline;
for thetha = linspace(0 , 10*pi , 500)
y = sin(x + thetha);
clearpoints(h)
addpoints(h , x , y)
drawnow
end
toc
3.360569 seconds
,不如更新現有的情節,但仍然比 plot(x,y)
好。
當然,如果你必須繪製一條線,就像在這個例子中一樣,這三種方法幾乎是等效的,並給出了平滑的動畫。但是如果你有更復雜的圖,那麼更新現有的 Line
物件會有所不同。