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')

cell2mat は、複数のハンドルが格納されている場合にのみ必要です。handles.axesImage

すべてを再度表示するには、ハンドルの完全なリストが必要になることに注意してください。

編集

Figure 上のすべての軸 (カラーバーを含む) とその子を削除する場合は、次の操作を実行できます (特定の軸を除外する必要がある場合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')

2 番目のプロットを非表示にします。ただし、@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 に答える