具有多条数据线/曲线的 Matlab 更新图

标签 matlab matlab-figure

我想尽快更新具有多条数据线/曲线的绘图。我已经看到一些更新情节的方法,例如使用:

h = plot(x,y);
set(h,'YDataSource','y')
set(h,'XDataSource','x')
refreshdata(h,'caller');

set(h,'XData',x,'YData',y);

对于单条曲线,效果很好,但是我不仅要更新一条数据曲线,还要更新多条数据曲线。我该怎么做?

最佳答案

如果您使用单个 plot 命令创建多个 plot 对象,则 plot 返回的句柄实际上是 an array of plot objects (每个地 block 一个)。

plots = plot(rand(2));
size(plots)

    1   2

因此,您不能简单地将另一个 [2x2] 矩阵分配给 XData

set(plots, 'XData', rand(2))

可以通过以下语法将新 XData 的元胞数组传递给绘图。只有在元胞数组中已有新值时,这才真正方便。

set(plots, {'XData'}, {rand(1,2); rand(1,2)})

其他选项是用新值单独更新每个绘图对象。就快速执行此操作而言,不一次设置它们确实不会对性能造成太大影响,因为在 MATLAB 空闲或您显式调用 drawnow 之前它们不会真正被渲染。

X = rand(2);
Y = rand(2);

for k = 1:numel(plots)
    set(plots(k), 'XData', X(k,:), 'YData', Y(k,:))
end

% Force the rendering *after* you update all data
drawnow

如果您真的想使用您展示的XDataSourceYDataSource 方法,您实际上可以这样做,但是您需要为每个 绘图对象。

% Do this when you create the plots
for k = 1:numel(plots)
    set(plots(k), 'XDataSource', sprintf('X(%d,:)', k), ...
                  'YDataSource', sprintf('Y(%d,:)', k))
end

% Now update the plot data
X = rand(2);
Y = rand(2);

refreshdata(plots)

关于具有多条数据线/曲线的 Matlab 更新图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155000/

相关文章:

matlab - 如何做一个频段?

matlab - 用图像替换箭袋箭头

MatLab:对数 z 轴和 bar3 的奇怪显示

MATLAB:不可见图形句柄在 Windows 和 Linux 上的行为不同?

matlab - 使用 C++ 中的 "engine.h"在 Matlab 中绘制四元数

matlab - 矩阵/张量三重积?

matlab - 将 float 转换为字符串

matlab - 保存在 MATLAB 中生成的图形最大化到全屏

matlab - 我们可以使用深度神经网络来解决回归问题吗?

MATLAB GUI 缩放多个绘图