1

我用 MATLAB 创建了一个 GUI 程序,带有一个菜单栏和选项卡,每个选项卡都包含一个绘图、一个文本框等。问题是,当我从菜单栏中选择一个选项卡并绘制一些东西时,以前绘图中的轴对象不会不会消失。

我尝试使用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 图形。我的菜单栏包含很多绘图和计算,不仅仅是这两个。

4

1 回答 1

0

问题是 hold on 可以防止任何东西被删除,只是不断地添加到情节中。您的代码中没有任何地方关闭延迟。如果您想继续使用 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
于 2014-01-20T11:55:55.797 回答