bie*_*nle 3 matlab matlab-figure
我想尽快更新包含多条数据线/曲线的图.我已经看到了一些更新绘图的方法,如下所示:
h = plot(x,y);
set(h,'YDataSource','y')
set(h,'XDataSource','x')
refreshdata(h,'caller');
Run Code Online (Sandbox Code Playgroud)
要么
set(h,'XData',x,'YData',y);
Run Code Online (Sandbox Code Playgroud)
对于单曲线,它工作得很好,但是我想要更新一条而不是多条数据曲线.我怎样才能做到这一点?
如果使用单个plot命令创建多个绘图对象,则返回的手柄plot实际上是一个绘图对象数组(每个绘图一个).
plots = plot(rand(2));
size(plots)
1 2
Run Code Online (Sandbox Code Playgroud)
因此,您不能简单地为其分配另一个[2x2]矩阵XData.
set(plots, 'XData', rand(2))
Run Code Online (Sandbox Code Playgroud)
您可以通过以下语法将新XData的单元数组传递给绘图.如果您已在单元格数组中拥有新值,那么这非常方便.
set(plots, {'XData'}, {rand(1,2); rand(1,2)})
Run Code Online (Sandbox Code Playgroud)
其他选项是使用新值单独更新每个绘图对象.就快速做到这一点而言,由于没有立即设置它们,所以实际上并没有太大的性能影响,因为在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
Run Code Online (Sandbox Code Playgroud)
如果您确实想要使用已显示的XDataSourceand YDataSource方法,则可以实际执行此操作,但是您需要为每个绘图对象指定唯一的数据源.
% 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1429 次 |
| 最近记录: |