快速绘图
顺序绘图或动画有三种主要方式: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
对象会有所不同。