关注this post我有一个功能,运行时,更新4个图。这可以按预期工作,除非我去更改显示哪个图,看起来像是先前显示的图的残余。我从bar
图表转到surfc
,但我仍然看到平面上的条形图。我目前正在设置我的数据和绘图
set(hplot2, 'yData', ME)
drawnow
我是否需要以某种方式刷新轴/情节?我使用set(plot1, 'Parent', axes1)
更改轴上的哪个绘图。我不知道问题出在哪里。
答案 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
绘制某些内容(通过调用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')