Matlab实时绘图

标签 matlab

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

figure;
hold on;

for i = 1:1000;
   plot(i, i);
   drawnow;
end

但性能较差。

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

最佳答案

与其进行高级plot 调用,不如考虑调整line handle properties ,更具体地说是 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

这样做,代码前后的 tic/toc 给出 0.09 秒;正如您可能已经看到的那样,一个天真的 plot 给出了将近 20 秒的运行时间。

请注意,我在此示例中仅使用了get 来生成数据集;我假设对于实时绘图,您需要绘制一些 DatasetXDatasetY,因此您需要相应地处理数据。但最后,一旦您获得了要在特定时间绘制的数据集,只需设置该行的整个XDataYData .

最后,请注意,对于非常大的数据集,此 set 调用有点笨拙,因为我们必须每次都设置行的数据而不是附加到它。 (但它肯定仍然比使用 plot 快。)这可能足够好,具体取决于数据集更改的频率。参见 this question更多细节。


编辑:从 MATLAB R2014b 开始,animinatedline对象使得从流数据中绘制点变得更容易:

Animated line objects optimize line animations by accumulating data from a streaming data source. After you create the initial animated line using the animatedline function, you can add new points to the line without having to redefine the existing points. Modify the appearance of the animated line by setting its properties.

关于Matlab实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8278368/

相关文章:

MATLAB:如何绘制 Probit 函数?

matlab - 在 MATLAB 中输出文本/数字,但在命令窗口中覆盖同一行

python - 为什么 MATLAB/Numpy/Scipy 性能缓慢且达不到 CPU 能力(失败)?

matlab - 为什么Matlab中pinv的答案与svd方法的答案不相等?

python - 在Python中生成随机稀疏正半定矩阵

arrays - 使用矩阵运算而不是 FOR 循环对元胞数组与索引值进行 bool 比较

matlab - 处理过的图像中的伪影

arrays - 防止 MATLAB 将单元素数组转换为非数组类型

regex - 如何在 MATLAB 中使用正则表达式删除路径(字符串)的结尾部分?

MATLAB:重写 table() 方法