我有一个matlab gui,包含4个图。如果在列表中选择了不同的文件,则应更新第一个图。其他3只应要求可见(并计算)。
然而,在绘制一次之后,我无法使图2-4不可见。
我试过
set(handles.axesImage, 'Visible', 'off');
但这只会删除轴,而不是整个图。
编辑:
而不是让事情变得不可见,是否也可以实际删除内容?通常我会打电话给close(hfig);
,但在这里我没有数字。
我试过
handles2hide = [axisObj;cell2mat(get(axisObj,'Children'))];
delete(handles2hide);
但对于未开槽的轴(启动后)失败
编辑: 我将代码更改为:
axisObj = handles.axesContour;
if ishandle(axisObj)
handles2delete = get(axisObj,'Children');
delete(handles2delete);
set(axisObj,'visible','off')
end
if (isfield(handles,'contour') && isfield(handles.contour,'hColorbar'))
delete(handles.contour.hColorbar);
delete(handles.contour.hColorbarLabel);
end
然而,彩条仍未取消删除,handles.contour.hColorbar
因Invalid handle object.
答案 0 :(得分:4)
您不仅要隐藏轴,还要隐藏所有孩子:
handles2hide = [handles.axesImage;cell2mat(get(handles.axesImage,'Children'))];
set(handles2hide,'visible','off')
只有在handles.axesImage
请注意,您需要完整的句柄列表才能使所有内容再次显示。
修改强>
如果要删除图形上的所有轴(包括颜色条)及其子项,可以执行以下操作(如果必须排除某些轴,则可以在句柄列表中使用setdiff
):
ah = findall(yourFigureHandle,'type','axes')
if ~isempty(ah)
delete(ah)
end
答案 1 :(得分:2)
我用这个:
set(allchild(handles.axes1),'visible','off');
set(handles.axes1,'visible','off');
隐藏我的轴。 我在这里找到了解决方案: Visible axes off
答案 2 :(得分:0)
您已使用子图和图表的句柄:
h(1)=subplot(221);
p(1)=plot(rand(10,1));
h(2)=subplot(222);
p(2)=plot(rand(10,1));
h(3)=subplot(223);
p(3)=plot(rand(10,1));
h(4)=subplot(224);
p(4)=plot(rand(10,1));
set([h(2) p(2)],'visible','off')
隐藏第二个情节。 @Jonas答案似乎更完整。这当然更容易,因为你不必像我在这里那样自己手动收集孩子。
答案 3 :(得分:0)
我现在用
解决了这个问题function z_removePlots(handles)
if (isfield(handles,'image') && isfield(handles.image,'hplot'))
if ishandle(handles.image.hplot)
delete(handles.image.hplot);
delete(findall(gcf,'tag','Colorbar'));
handles.image.hplot = 0;
set(handles.axesImage, 'Visible', 'off');
end
end
if (isfield(handles,'contour') && isfield(handles.contour,'hplot'))
if ishandle(handles.contour.hplot)
delete(handles.contour.hplot);
handles.contour.hplot = 0;
ClearLinesFromAxes(handles.axesContour)
set(handles.axesContour, 'Visible', 'off');
end
end
guidata(handles.output,handles);
带
function ClearLinesFromAxes(axisObj)
if ishandle(axisObj)
handles2delete = get(axisObj,'Children');
delete(handles2delete);
end