我有一个matlab的GUI,应包含4个地块。 如果在列表中选择一个不同的文件中的第一条曲线将被更新。 其他3应仅是可见的(和计算)上的请求。
但是我不能让图2-4可见他们已绘制一次之后。
我试过了
set(handles.axesImage, 'Visible', 'off');
但是,只有删除的轴,而不是整个情节。
编辑:除了使事情unvisible的,是不是也有可能实际delele内容? 通常我会打电话close(hfig);
,但在这里我没有身影。
我试过了
handles2hide = [axisObj;cell2mat(get(axisObj,'Children'))];
delete(handles2hide);
但是,失败的unplotted轴(启动后)
编辑:我改变了代码:
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.
要隐藏不仅轴,但是他们所有的孩子:
handles2hide = [handles.axesImage;cell2mat(get(handles.axesImage,'Children'))];
set(handles2hide,'visible','off')
需要的cell2mat仅如果有一个以上的手柄存储在handles.axesImage
请注意,您需要手柄的完整列表,使一切再次可见。
编辑
如果你想删除一个人影所有轴(包括colorbars)和他们的孩子,你可以做以下的(如果你要排除某些轴,您可以使用setdiff
在把手的列表):
ah = findall(yourFigureHandle,'type','axes')
if ~isempty(ah)
delete(ah)
end
我用这个:
set(allchild(handles.axes1),'visible','off');
set(handles.axes1,'visible','off');
隐藏我的轴。 我发现这里的解决方案: 可见轴关闭
你必须使用手柄的次要情节和情节:
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答案似乎更完整不过。 这当然容易,因为你不必像我一样在这里给自己手动收集孩子们。
我现在解决了它与
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