2016-01-20 138 views
1
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 

當我運行上層代碼時,兩個數字像下圖一樣交替彈出。如何阻止matlab圖彈出

enter image description here

enter image description here

我想停止這種彈出屬性並保持整個迭代像下面過程中的位置。

enter image description here

我怎麼能更改這個屬性?

預先感謝您。

我添加了一個代碼。在這段代碼中,兩個數字不斷閃爍。 我想要做的就是停止閃爍。

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 
+0

你有沒有考慮過使用['subplot'](http://www.mathworks.com/help/matlab/ref/subplot.html?refresh=true)使用1圖窗口和2個圖? – Dan

+0

現在,我正在使用子情節。但是,我想繪製兩個不同數字的移動圖。如果沒有辦法,我會繼續使用副劇場。 – KKS

+1

您可以[控制圖形窗口的位置和大小](http://www.mathworks.com/help/matlab/ref/figure-properties.html#zmw57dd0e229553),使其不重疊... – Dan

回答

2

使用patch對象的''Parent'' property指定axes繪製上而不需要figure調用來更新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 
+0

謝謝你的詳細解釋 – KKS

3

您應該避免在循環中調用圖形!這是h1=figure(1);h2=figure(2);,保持切換焦點。無論何時您想在圖形窗口中放入某些東西,對於某些軸對象ax1,請使用'parent',h1選項對或'parent',ax1。以避免撥打figure。我建議您只使用figure來創建圖形窗口。

例如,不是使用figure(1);image(img);,而是先創建圖形和軸對象(h1=figure(1);ax1=axes('Parent',h1);),然後在想要更新圖中的圖像時使用image(img,'Parent',ax1);

+0

我添加了一個代碼。我在圖中使用補丁,當我使用'父'補丁時,matlab說這是不可能的。 – KKS

+0

根據http://se.mathworks.com/help/matlab/ref/patch-properties.html,你可以看到一個補丁對象的父屬性應該是類型的座標軸,所以你可以添加','parent' ,ax1'(你當然已經定義了你的軸對象'ax1')在你調用'patch''函數結束時。 –

+0

我想出了你的答案。謝謝〜 – KKS

1

相反的增加和在每次迭代中刪除每個補丁,首先考慮外循環創建它們,然後就改裏面的循環:

%%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 
+0

謝謝你的回答〜 – KKS

相關問題