快速繪圖

順序繪圖或動畫有三種主要方式: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 物件的 XDataYData 屬性。

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 物件會有所不同。