我是 matlab 新手,我想实时绘制一些数据。
我的方法如下:
figure;
hold on;
for i = 1:1000;
plot(i, i);
drawnow;
end
但其性能较差。
我还在 stackoverflow 上找到了一个建议:https://stackoverflow.com/q/3118918/1066838但只绘制了最后一组数据,所以我总是在图中只看到一个点。
而不是做高水平的事plot
打电话,考虑调整线句柄属性,更具体地说XData
and YData
, 在循环:
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
这样做,一个tic
/toc
代码之前/之后给出 0.09 秒;天真的plot
正如您所看到的,您可能已经看到,运行时间接近 20 秒。
请注意,我只使用了get
在此示例中生成数据集;我假设对于实时情节你有一些DatasetX
and DatasetY
绘图,因此您需要相应地处理数据。但最后,一旦你获得了想要在特定时间绘制的数据集,只需set
整条线XData
and YData
.
最后,请注意,这set
对于非常大的数据集,调用有点笨拙,因为我们必须每次都设置行数据而不是附加到它。 (但它肯定仍然比使用更快plot
.)这可能足够好,具体取决于数据集更改的频率。看这个问题更多细节。
EDIT:从 MATLAB R2014b 开始,animinatedline对象使得从流数据中绘制点变得更容易:
动画线条对象通过累积来自流数据源的数据来优化线条动画。使用animatedline 函数创建初始动画线后,您可以向该线添加新点,而无需重新定义现有点。通过设置动画线条的属性来修改动画线条的外观。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)