4

我有一个包含 4 个图的 matlab gui。如果在列表中选择了不同的文件,则应更新第一个图。其他 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.

4

4 回答 4

4

您不仅要隐藏轴,还要隐藏它们的所有子项:

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

仅当存储多个句柄时才需要 cell2mathandles.axesImage

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

编辑

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

ah = findall(yourFigureHandle,'type','axes')
if ~isempty(ah)
   delete(ah)
end
于 2012-08-08T13:33:50.170 回答
2

我用这个:

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

隐藏我的斧头。我在这里找到了解决方案: 可见轴关闭

于 2013-01-03T18:53:08.097 回答
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 的答案似乎更完整。这当然更容易,因为您不必像我在这里那样手动收集孩子。

于 2012-08-08T13:33:33.533 回答
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
于 2012-08-09T08:24:42.270 回答