направете осите невидими или изтрийте напълно графиката

Имам 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.hColorbar се проваля с Invalid handle object.


person Matthias Pospiech    schedule 08.08.2012    source източник
comment
Изтриването работи за мен. Може би искате да проверите дали изтривате само валидни манипулатори, т.е. delete(handles2hide(ishandle(handles2hide)))   -  person Jonas    schedule 08.08.2012
comment
Получавам грешка преди това: ??? Cell contents reference from a non-cell array object. в ред handles2hide = [cell2mat(get(axisObj,'Children'))];. Трябваше да премахна axisObj от списъка за изтриване, защото вече не мога да чертая към изтрита ос...   -  person Matthias Pospiech    schedule 09.08.2012
comment

$this->email->clear()

Инициализира всички имейл променливи в празно състояние. Тази функция е предназначена за използване, ако изпълнявате функцията за изпращане на имейл в цикъл, което позволява данните да бъдат нулирани между циклите.

foreach ($list as $name => $address)
{
    $this->email->clear();

    $this->email->to($address);
    $this->email->from('[email protected]');
    $this->email->subject('Here is your info '.$name);
    $this->email->message('Hi '.$name.' Here is the info you requested.');
    $this->email->send();
}

Ако зададете параметъра на TRUE, всички прикачени файлове също ще бъдат изчистени:

$this->email->clear(TRUE);
  -  person Matthias Pospiech    schedule 09.08.2012


Отговори (4)


Искате да скриете не само осите, но и всичките им деца:

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

Cell2mat е необходим само ако има повече от един манипулатор, съхранен в handles.axesImage

Имайте предвид, че ще ви трябва пълният списък с манипулатори, за да направите всичко видимо отново.

РЕДАКТИРАНЕ

Ако искате да изтриете всички оси (включително цветни ленти) и техните потомци на фигура, можете да направите следното (ако трябва да изключите определени оси, можете да използвате setdiff в списъците с манипулатори):

ah = findall(yourFigureHandle,'type','axes')
if ~isempty(ah)
   delete(ah)
end
person Jonas    schedule 08.08.2012

Аз използвам това:

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

за скриването на моите брадви. Намерих решението тук: Видимите оси са изключени

person dibrut    schedule 03.01.2013

Вие сте използвали манипулаторите на подграфиците и графиките:

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 обаче изглежда по-пълен. Със сигурност е по-лесно, защото не е нужно сам да събираш децата ръчно, както направих аз тук.

person Gunther Struyf    schedule 08.08.2012
comment
h(2)=subplot(222);plot(rand(10)); set(h(2),'visible','off') е проблемът, ако разбирам правилно OP - person Jonas; 08.08.2012
comment
@Jonas да, срещнах и този проблем при разширяването на тестовете ми... актуализация^^ - person Gunther Struyf; 08.08.2012
comment
Добавих подзапис към моя графичен интерфейс в кода: това само обърква целия графичен интерфейс и прави дръжките на всички оси невалидни -› без допълнителна работа (която не знам) неизползваеми. - person Matthias Pospiech; 09.08.2012

Сега го реших с

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
person Matthias Pospiech    schedule 09.08.2012