如何停止弹出matlab图形

How to stop matlab figure pop up

for m=1:10;
    pause(0.2)
    h1=figure(1);
    set(h1,'Position',[200 200 600 500]);
    pause(0.2)
    h2=figure(2);
    set(h2,'Position',[600 200 600 500]);
end

当我运行上面的代码时,两个数字交替弹出,如下所示。

我想停止此弹出窗口 属性 并在整个迭代过程中保持该位置,如下所示。

我该如何更改此 属性?

提前致谢。

我加个代码。在这段代码中,两个数字不断闪烁。 我想做的是停止闪烁。

clear all
close all
clc
%%patch1%%
x1=[-2 0 0 -2];
y1=[-1 -1 1 1];
z1=[0 0 0 0];
a=patch(x1,y1,z1,'green');
c=patch(x1,y1,z1,'green');

%%patch2%%
x2=[0 2 2 0];
y2=[-1 -1 1 1];
z2=[0 0 0 0];
b=patch(x2,y2,z2,'red');
d=patch(x2,y2,z2,'red');

%h1=figure(1),grid on

    for k=0:pi/10:10*pi
        delete([a b])
        figure(1),grid on
        a=patch(x1,y1,z1+[-0.1*sin(k) 0.3*sin(k) 0.3*sin(k) -0.1*sin(k)],'green');
        b=patch(x2,y2,z2+[0.3*sin(k) -0.1*sin(k) -0.1*sin(k) 0.3*sin(k)],'red');
        axis([-2.5 2.5 -1.5 1.5 -0.5 0.5])

        pause(0.05)
        delete([c d])
        figure(2),grid on
        c=patch(x1,y1,z1+[-0.3*sin(k) 0.05*sin(k) -0.05*sin(k) -0.4*sin(k)],'green');
        d=patch(x2,y2,z2+[0.05*sin(k) 0.4*sin(k) 0.3*sin(k) -0.05*sin(k)],'red');
        axis([-2.5 2.5 -1.5 1.5 -0.5 0.5])

        pause(0.05)

    end

你应该避免在循环中调用图形!是 h1=figure(1);h2=figure(2); 行不断切换焦点。每当您想在图形 window 中放置某些内容时,请使用 'parent',h1 选项对或 'parent',ax1 用于某些轴对象 ax1。避免调用 figure。我建议您只使用 figure 创建 figure-window.

例如,不要使用 figure(1);image(img);,而是先创建图形和坐标轴对象 (h1=figure(1);ax1=axes('Parent',h1);),然后每当您想更新图形中的图像时,使用 image(img,'Parent',ax1); .

使用 ''Parent'' property of the patch object to specify the axes to plot on without needing the figure call to update the current axes.

使用你的例子:

f(1) = figure;
f(2) = figure;
ax(1) = axes('Parent', f(1));
ax(2) = axes('Parent', f(2));

for ii = 1:length(ax)
    axis(ax(ii), [-2.5 2.5 -1.5 1.5 -0.5 0.5]);
    grid(ax(ii), 'on');
    hold(ax(ii), 'on');
end

%%patch1%%
x1=[-2 0 0 -2];
y1=[-1 -1 1 1];
z1=[0 0 0 0];
a=patch(x1,y1,z1,'green', 'Parent', ax(1));
c=patch(x1,y1,z1,'green', 'Parent', ax(2));

%%patch2%%
x2=[0 2 2 0];
y2=[-1 -1 1 1];
z2=[0 0 0 0];
b=patch(x2,y2,z2,'red', 'Parent', ax(1));
d=patch(x2,y2,z2,'red', 'Parent', ax(2));

for k=0:pi/10:10*pi
    delete([a b])
    a=patch(x1,y1,z1+[-0.1*sin(k) 0.3*sin(k) 0.3*sin(k) -0.1*sin(k)],'green', 'Parent', ax(1));
    b=patch(x2,y2,z2+[0.3*sin(k) -0.1*sin(k) -0.1*sin(k) 0.3*sin(k)],'red', 'Parent', ax(1));

    pause(0.05)
    delete([c d])
    c=patch(x1,y1,z1+[-0.3*sin(k) 0.05*sin(k) -0.05*sin(k) -0.4*sin(k)],'green', 'Parent', ax(2));
    d=patch(x2,y2,z2+[0.05*sin(k) 0.4*sin(k) 0.3*sin(k) -0.05*sin(k)],'red', 'Parent', ax(2));
    pause(0.05)
end

for ii = 1:length(ax)
    hold(ax(ii), 'off');
end

顺便说一句,您还可以通过修改补丁对象的 'XData', 'YData', and 'ZData' 来更新补丁,而不是在每个循环中删除和创建补丁对象。这通常更有效。

以您的主要 for 循环为例 (assumes R2014b or newer):

for k=0:pi/10:10*pi
    a.ZData = z1+[-0.1*sin(k) 0.3*sin(k) 0.3*sin(k) -0.1*sin(k)];
    b.ZData = z2+[0.3*sin(k) -0.1*sin(k) -0.1*sin(k) 0.3*sin(k)];
    pause(0.05)

    c.ZData = z1+[-0.3*sin(k) 0.05*sin(k) -0.05*sin(k) -0.4*sin(k)];
    d.ZData = z2+[0.05*sin(k) 0.4*sin(k) 0.3*sin(k) -0.05*sin(k)];
    pause(0.05)
end

与其在每次迭代中添加和删除每个补丁,不如考虑先在循环外创建它们,然后再在循环内更改它们:

%%patch1%%
x1=[-2 0 0 -2];
y1=[-1 -1 1 1];
z1=[0 0 0 0];

%%patch2%%
x2=[0 2 2 0];
y2=[-1 -1 1 1];
z2=[0 0 0 0];

figure(1),grid on
a=patch(x1,y1,z1,'green');
b=patch(x2,y2,z2,'red');
axis([-2.5 2.5 -1.5 1.5 -0.5 0.5])

figure(2),grid on
c=patch(x1,y1,z1,'green');
d=patch(x2,y2,z2,'red');
axis([-2.5 2.5 -1.5 1.5 -0.5 0.5])

for k=0:pi/10:10*pi
    set(a, 'ZData', z1+[-0.1*sin(k) 0.3*sin(k) 0.3*sin(k) -0.1*sin(k)]);
    set(b, 'ZData',z2+[0.3*sin(k) -0.1*sin(k) -0.1*sin(k) 0.3*sin(k)]);

    pause(0.05)
    set(c, 'ZData', z1+[-0.3*sin(k) 0.05*sin(k) -0.05*sin(k) -0.4*sin(k)]);
    set(d, 'ZData', z2+[0.05*sin(k) 0.4*sin(k) 0.3*sin(k) -0.05*sin(k)]);

    pause(0.05)
end