如何停止弹出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
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