2015-09-25 47 views
0

我想迭代地從圖中創建子圖。我有以下代碼:繪製圖中的子圖

for i=1:numel(snips_timesteps) 
     x=openfig(sprintf('./results/snips/temp/%d.fig',i),'reuse'); 
     title(sprintf('Timestep %d',snips_timesteps(i))); 
     xlabel(''); 
     ax= gca; 
     handles{i} = get(ax,'children'); 
     close gcf; 
    end 
    h3 = figure; %create new figure 
    for i=1:numel(snips_timesteps) 
     s=subplot(4,4,i) 
     copyobj(handles{i},s); 
    end 

錯誤我得到的是:

Error using copyobj 
Copyobj cannot create a copy of an 
invalid handle. 



K>> handles{i} 

ans = 

    3x1 graphics array: 

    Graphics (deleted handle) 
    Graphics (deleted handle) 
    Graphics (deleted handle) 

是否可以關閉一個數字,但仍保留它的處理?這似乎是參考被刪除。

編輯

handles={}; 
    for i=1:numel(snips_timesteps) 
     x=openfig(sprintf('./results/snips/temp/%d.fig',i),'reuse'); 
     title(sprintf('Timestep %d',snips_timesteps(i))); 
     xlabel(''); 
     ax= gca; 
     handles{i} = get(ax,'children'); 
     %close gcf; 
    end 
    h3 = figure; %create new figure 
    for i=1:numel(snips_timesteps) 
     figure(h3); 
     s=subplot(4,4,i) 
     copyobj(handles{i},s); 
     close(handles{i}); 
    end 

錯誤:

K>> handles{i} 

ans = 

    3x1 graphics array: 

    Line 
    Quiver 
    Line 

K>> close(handles{i}) 
Error using close (line 116) 
Invalid figure handle. 

如果我刪除close(handles{i})再次繪製第一張圖中所有的次要情節!

回答

2

否按closing the figure您正在刪除它以及與其關聯的所有數據(包括其句柄)。

如果您刪除close gcf;並在copyobj(handles{i},s);之後放置figure(i); close gcf;,您將獲得所需的效果。但是,您還需要在s=subplot(4,4,i)之前添加figure(h3);以確保將子圖添加到正確的圖中。

下面是一些示例代碼,以顯示它的工作。它首先創建4個數字並抓住它們的軸線。然後我們遍歷每個圖形並將其複製到另一個圖形的子圖中。

for i = 1:4 
    figure(i) 
    y = randi(10, [4 3]); 
    bar(y) 

    ax = gca; 
    handles{i} = get(ax, 'Children'); 
end 

for i = 1:4 
    figure(5); 
    s = subplot(2, 2, i); 
    copyobj(handles{i}, s); 
    figure(i); 
    close gcf; 
end 
+0

感謝您的回覆。請檢查上面的修改。 –

+0

我使用你的建議出現錯誤。請檢查問題中的編輯。 –

+0

@AbhishekBhatia'close(handles {i})'是錯的,是我的錯。簡單的評論就足夠了。 'handles {i}'不是'gcf'對象,因此它不起作用。 – IKavanagh