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

Dynamically plotting multiple plots to be displayed on one set of axes (one plot at a time)

之后,我有一个函数可以在 运行 时更新 4 个地块。这按预期工作,除了当我去更改显示的图时,它看起来像以前显示的图的残余。我从 bar 图表转到 surfc,但我仍然看到横跨平面的条形图。我目前正在使用

设置我的数据和绘图
set(hplot2, 'yData', ME)
drawnow

我需要以某种方式刷新 axes/plot 吗?我使用 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)。然后,您可以根据需要切换轴 on/off 的可见性。这样,您的所有视图设置都会为给定的轴保留。

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')