动态绘制要在一组轴上显示的多个图(一次一个图)



在这篇文章之后,我有一个函数,运行时会更新 4 个图。这按预期工作,除了当我去更改显示的情节时,看起来有先前显示的情节的残余。我从bar图转到surfc图,但我仍然看到横跨平面的条形图。我目前正在设置我的数据和绘图

set(hplot2, 'yData', ME)
drawnow

我需要以某种方式刷新轴/绘图吗?我用set(plot1, 'Parent', axes1)更改轴上的哪个图。我不知道问题在哪里出现。

如果要在两个绘图之间切换,则需要在使用cla绘制下一件事之前清除轴

cla(axes1);

或者,您只需切换现有绘图对象的可见性。

% To show only the bar plot
set(hbar, 'Visible', 'on')
set(hsurf, 'Visible', 'off')
% To show only the surf plot
set(hbar, 'Visible', 'off')
set(hsurf, 'Visible', 'on')

问题的根源在于,一个轴实际上可以容纳许多图,因此,如果您只是创建一个新图并将其作为子图分配给轴,则其他图对象仍然存在。

如果您每次打印某些内容(通过调用barsurfc)时都创建全新的图形对象,则使用cla这将是最简单的。话虽如此,如果可以调整代码以简单地更新现有的绘图对象,那么从性能和图形管理的角度来看,这是理想的选择。

另外,作为另一个旁注。我不鼓励在创建对象后使用 set(plot1, 'Parent', axes1)。直接在对象构造函数中指定 Parent 属性会更可靠。通过这种方式,您可以确保它直接进入您想要的轴。

plot1 = bar(data, 'Parent', axes1);    

编辑

现在我想到了,由于您在 3D 和 2D 数据之间切换,因此在同一位置简单地将两个轴放在同一位置(一个用于bar,一个用于surf)可能会更容易。然后,您可以根据需要打开/关闭轴的可见性。这样,将保留给定轴的所有视图设置。

barax = axes();
surfax = axes();
% Ensure they are located at the same position
link = linkprop([barax, surfax], 'Position');
hbar = bar(data, 'Parent', barax);
hsurf = surfc(data, 'Parent', surfax);
% Toggle these to switch plots.
set(barax, 'Visible', 'off')
set(surfax, 'Visible', 'on')

相关内容

  • 没有找到相关文章

最新更新