2016-03-08 137 views
0

正在关注this post我有一个函数,在运行时更新4个绘图。这可以按预期工作,除了当我去改变显示哪个图时,它看起来像是先前显示的图的残余物。我从bar图转到surfc,但我仍看到横跨平面的酒吧。我目前正在设置我的数据和绘图动态绘制多个绘图显示在一组轴上(一次绘制一个绘图)

set(hplot2, 'yData', ME) 
drawnow 

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

回答

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

问题的根源,是一轴可实际持有许多地块,因此,如果您只需创建一个新的情节和其指定为孩子的轴,其他情节对象仍然存在。

如果您每次绘制一些东西(通过调用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')