0

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

set(hplot2, 'yData', ME)
drawnow

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

4

1 回答 1

2

如果您要在两个绘图之间切换,您要么想要在绘制下一件事之前清除轴,使用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')

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

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

另外,作为另一个旁注。我不鼓励set(plot1, 'Parent', axes1)在对象创建后使用。Parent直接在对象构造函数中指定属性更加健壮。这样,您可以确保它直接到达您想要的轴。

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

编辑

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

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')
于 2016-03-08T14:34:00.163 回答