在Matlab图中动态绘制数据

时间:2019-05-29 01:56:18

标签: matlab matlab-figure drawnow

为了解释我所面临的问题,我有以下代码。

ind=(1:10);
A=[sin(ind);cos(ind);tan(ind);sec(ind)]';
plot(ind,A(:,1),ind,A(:,2),ind,A(:,3),ind,A(:,4));

结果如下:

enter image description here

现在,在我的真实程序中,矩阵A每隔几秒钟就会更新一次新行。我想在获得新行后立即动态更新图形。经过一番谷歌搜索后,我意识到我必须使用drawow,但不确定如何使用。

到目前为止,我有以下代码。

B=A(1,:);
h = plot(B,'YDataSource','B');
for k = 1:size(A,1)
   B=A(1:k,:);
   refreshdata(h,'caller') 
   drawnow
   pause(.25)
end

但是我收到以下错误消息:

  

使用refreshdata时出错(第70行)无法从“ B”刷新YData。

     

测试错误(第9行)refreshdata(h,'caller')

请帮助。

1 个答案:

答案 0 :(得分:1)

经过更多谷歌搜索后,我解决了它。以下代码可以实现我想要的:

ind=(1:10);
A=[sin(ind);cos(ind);tan(ind);sec(ind)]';
plots=plot(ind(1,1),A(1,1),ind(1,1),A(1,2),ind(1,1),A(1,3),ind(1,1),A(1,4));
for k = 1:size(plots,1)
   set(plots, {'XData'}, {ind(1,1:k);ind(1,1:k);ind(1,1:k);ind(1,1:k)})
   set(plots, {'YData'}, {A(1:k,1);A(1:k,2);A(1:k,3);A(1:k,4)})
   drawnow
   pause(.5)
end

这个答案帮助我找到了解决方法:https://stackoverflow.com/a/36155528/919177