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

时间:2016-03-08 14:28:43

标签: matlab matlab-figure matlab-guide matlab-gui

关注this post我有一个功能,运行时,更新4个图。这可以按预期工作,除非我去更改显示哪个图,看起来像是先前显示的图的残余。我从bar图表转到surfc,但我仍然看到平面上的条形图。我目前正在设置我的数据和绘图

set(hplot2, 'yData', ME)
drawnow

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

1 个答案:

答案 0 :(得分: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')

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

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

另外,另一方面说明。在创建对象后我不鼓励使用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')