使轴无形的或完全删除情节(make axes invisible or delete plot co

2019-06-26 21:20发布

我有一个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.

Answer 1:

要隐藏不仅轴,但是他们所有的孩子:

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


Answer 2:

我用这个:

    set(allchild(handles.axes1),'visible','off'); 
    set(handles.axes1,'visible','off'); 

隐藏我的轴。 我发现这里的解决方案: 可见轴关闭



Answer 3:

你必须使用手柄的次要情节和情节:

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答案似乎更完整不过。 这当然容易,因为你不必像我一样在这里给自己手动收集孩子们。



Answer 4:

我现在解决了它与

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


文章来源: make axes invisible or delete plot completely
标签: matlab axes