Очистить все графические объекты определенного типа

Я создал программу с графическим интерфейсом с помощью MATLAB, со строкой меню и вкладками, каждая из которых содержит график, текстовое поле и т. д. Проблема в том, что когда я выбираю вкладку в строке меню и рисую что-то, объекты осей из прежних графиков не не исчезнет.

Я безуспешно пытался использовать cla reset. clf сработало, но моя строка меню тоже исчезла.

Вот мой код:

function fel1_Callback(hObject, eventdata, handles) %% plot sin(x)    
    cla reset
    clc
    clear all

    d = inputdlg('n:','Ertekadas',1);
    n = str2double(d);

    x=linspace(-3*pi,3*pi,1000);
    y=sin(x);
    plot(x,y,'k','LineWidth',4)
    sz='ymcrgbkymcrgbkymcrgbkymcrgbk';
    hold on
    title('Sin(x) Taylor sora')
    %n = str2num(N);
    f=zeros(size(x));
    for i=1:n
        t=(-1)^(i-1)*x.^(2*i-1)/factorial(2*i-1);
        f=f+t;
        plot(x,f,sz(i),'LineWidth',2)
        axis([-10 10 -10 10])
        pause(0.1)
        hold on
        n=n+1;
    end

function fel7_Callback(hObject, eventdata, handles) %%Sum 1/n^2
    clear all
    clc
    cla reset

    title('Suma 1/n^2','fontsize',20)
    d = inputdlg('Epszilon:','Ertek',1);
    epsz = str2double(d);
    n=1;
    x=0;
    while 1/n^2>epsz
        x=x+sum(1/n^2);
        n=n+1;
    end

    A = uicontrol('style','text','units','pixels',...
        'position',[550 550 120 40],'fontsize',20,'string','Epsz =');
    B = uicontrol('style','text','units','pixels',...
        'position',[670 550 120 40],'fontsize',20);
    set(B,'String',epsz)
    C = uicontrol('style','text','units','pixels', ...
        'position',[550 400 120 40],'fontsize',20,'string','Osszeg =');
    D = uicontrol('style','text','units','pixels',...
        'position',[670 400 120 40],'fontsize',20);
    set(D,'String',x)

Я использую только одну основную фигуру GUI. Моя панель меню содержит множество графиков и расчетов, а не только эти два.


person alinush2693    schedule 19.05.2013    source источник


Ответы (1)


Проблема в том, что Hold предотвращает стирание чего-либо и просто продолжает добавлять к сюжету. Нигде в вашем коде вы не отключаете. Если вы хотите продолжать использовать команду удержания, ваш код должен выглядеть так:

function fel1_Callback(hObject, eventdata, handles) %% plot sin(x)    

d = inputdlg('n:','Ertekadas',1);
n = str2double(d);

x=linspace(-3*pi,3*pi,1000);
y=sin(x);
hold off % The next plot command should now clear the old plot and create a new one**
plot(x,y,'k','LineWidth',4)
sz='ymcrgbkymcrgbkymcrgbkymcrgbk';
hold on
title('Sin(x) Taylor sora')
%n = str2num(N);
f=zeros(size(x));
for i=1:n
    t=(-1)^(i-1)*x.^(2*i-1)/factorial(2*i-1);
    f=f+t;
    plot(x,f,sz(i),'LineWidth',2)
    axis([-10 10 -10 10])
    pause(0.1)
    %hold on  %not necessary, this was turned on before the loop
    n=n+1;
end
hold off  % return the figure to the normal (default) "hold off" state
person outdoor_guy    schedule 20.01.2014