Matlab实时情节

vik*_*rgt 7 matlab

我是matlab的新手,我想实时绘制一些数据.我的方法如下:

figure;
hold on;

for i = 1:1000;
   plot(i, i);
   drawnow;
end
Run Code Online (Sandbox Code Playgroud)

但它的表现很差.

我还在stackoverflow上找到了一个建议:https://stackoverflow.com/q/3118918/1066838 但是只绘制了最后设置的数据,所以我总是看到图中只有一个点.

Dan*_*hoa 21

不要进行高级plot调用,而是考虑调整行句柄属性,更具体地说是调整循环中的XDataYData:

figure(1);
lHandle = line(nan, nan); %# Generate a blank line and return the line handle

for i = 1:1000
    X = get(lHandle, 'XData');
    Y = get(lHandle, 'YData');

    X = [X i];
    Y = [Y i];

    set(lHandle, 'XData', X, 'YData', Y);
end
Run Code Online (Sandbox Code Playgroud)

这样做,这样,一个tic/ toc前/代码给后0.09秒; plot正如你所看到的那样天真,你可以看到一个近20秒的运行时间.

请注意,我仅get在此示例中用于生成数据集; 我假设您有一些实时情节,DatasetX并且有一些DatasetY情节,因此您需要相应地处理您的数据.但最后,一旦你有了想要在特定时间绘制的数据集,只set需要线条的整个XDataYData.

最后,请注意,set对于非常大的数据集,此调用有点笨拙,因为我们必须每次都设置行的数据而不是追加到它.(但它肯定比使用更快plot.)这可能足够好,具体取决于数据集更改的频率.有关详细信息,请参阅此问题.


编辑:从MATLAB R2014b开始,该animinatedline对象可以更容易地绘制来自流数据的点:

动画线对象通过累积来自流数据源的数据来优化线动画.使用animatedline函数创建初始动画线后,可以向线添加新点,而无需重新定义现有点.通过设置其属性来修改动画线条的外观.