使轴不可见或完全删除绘图

时间:2012-08-08 13:24:02

标签: matlab axes

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

而失败

4 个答案:

答案 0 :(得分:4)

您不仅要隐藏轴,还要隐藏所有孩子:

handles2hide = [handles.axesImage;cell2mat(get(handles.axesImage,'Children'))];
set(handles2hide,'visible','off')

只有在handles.axesImage

中存储了多个句柄时才需要cell2mat

请注意,您需要完整的句柄列表才能使所有内容再次显示。

修改

如果要删除图形上的所有轴(包括颜色条)及其子项,可以执行以下操作(如果必须排除某些轴,则可以在句柄列表中使用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