Matlab使用多条数据线/曲线更新绘图

时间:2016-03-22 12:57:15

标签: matlab matlab-figure

我想尽快更新包含多条数据线/曲线的图。我已经看到了一些更新绘图的方法,如:

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

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

对于单曲线,它工作得很好,但是我想要更新一条而不是多条数据曲线。我怎么能这样做?

2 个答案:

答案 0 :(得分:8)

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

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)

答案 1 :(得分:1)

您可以使用drawnow

%Creation of the vectors

x = 1:100;
y = rand(1,100);

%1st plot 
h = plot(x,y);

pause(2);

%update y
y = rand(1,100);
set(h,'YData',y)
%update the plot.
drawnow