在这篇文章之后,我有一个函数,运行时会更新 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')
问题的根源在于,一个轴实际上可以容纳许多图,因此,如果您只是创建一个新图并将其作为子图分配给轴,则其他图对象仍然存在。
如果您每次打印某些内容(通过调用bar
或surfc
)时都创建全新的图形对象,则使用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')