【问题标题】:Plotting data dynamically in the Matlab figure在 Matlab 图中动态绘制数据
【发布时间】:2019-05-29 01:56:17
【问题描述】:

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

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));

结果如下所示:

现在,在我的实际程序中,矩阵 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')

请帮忙。

【问题讨论】:

    标签: matlab matlab-figure drawnow


    【解决方案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

    【讨论】:

    • 我认为您在使用set(plots) 时不需要那些括号{。如果您使用的是 MATLAB 2014b 或更高版本,则可以使用点表示法:plots.XData =。您也可以尝试使用drawnow limitrate,以便在不暂停的情况下更快地绘图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多