2016-02-15 30 views
1

我編寫並使用了一個matlab程序,其中通常使用子圖命令生成大量圖形。 [這些數字代表單分子實驗中的分子軌跡,它們的總數並不是預先知道的,但通常達到幾百個。]迄今爲止它工作得非常順利,我得到以下錯誤信息:matlab中特定圖形 - 副圖連接處的令人費解的行爲

錯誤使用子圖(第159行) 需要有效的軸處理輸入。

一些手工調試,我想我已經分離的問題,因爲從下面的順序來後:

figure(i) 
... 
subplot(i) 

在那裏我可以是任何整數。最容易重現的例子是:

i=211; 
... 
x=linspace(0,1,101); 
figure(i) 
subplot(211) 
plot(x,x) 
subplot(212) 
plot(x,x) 

在上述情況下,通過設置i = 212可以引發相同的問題。顯然,我可能髒迅速用一些

if i=212 || 211 
    j=something-different-from-212-or-211; 
else 
    j=i; 
end 
figure(j) 
... 

解決這個問題,但我也希望知道更多的東西便於/得心應手/優雅的存在 - 也,我會好奇地想知道更多,如果可能的話,大約這個問題的原因!

謝謝!

+0

您是用多軸(子圖)還是多軸圖創建多個圖形? – Erik

+0

我正在用多個軸創建多個圖形。 通常,我有一個循環運行在上面的索引i上,對於每個我打開一個包含通常2,3或4個子圖(取決於)的圖。 (我不想關閉先前生成的數字) –

+0

您確定您應該同時使用'figure(i)'和'subplot(i)',並使用相同的索引變量'i'嗎?在所有這些數字中,您可能沒有相同數量的數字和軸數。如果你有'N'圖形,那麼用'figure(n)'來改變/創建數字,如果圖中有'M'軸,則使用'n = 1:N',然後對這些圖形使用不同的子圖索引變量'M'軸(取決於子圖佈局:子圖軸的列數和行數)。 – Erik

回答

2

我懷疑的許多方面,你可以打電話subplot而事實上,老把手也被稱爲數字,例如下面的一個「特點」失敗:

figure(211); subplot(211) 
figure(212); subplot(212) 

但:

figure; subplot(211) 
figure; subplot(212) 

都可以。

在第一個Matlab中,Matlab正在做的是分析輸入參數以確定處理方式。即第一個參數也可以是一個軸手柄。例如

ax = subplot (211) 
% some other code and plot on other subplot 
% you can then set the 1st subplot to be active again: 
subplot (ax); 

這裏的關鍵項目是第一參數插曲可以是很多東西......

在你那裏,你有原來如此:

figure(211); 

這意味着,當你通過在211中轉入該子區域

subplot(211) 

它檢查是否它的一個handle - >,它是:

figure(211) 
ishandle(211) 

然後檢查,看看它的axes - >這是它失敗,並觸發您看到的錯誤。

我很少在所有使用的插曲,當我做我一直使用的語法:

hFig = figure; 
ax(p) = subplot(m,n,p,'Parent',hFig) 

在那裏我有把手GUI對象並在其上運行時,明確他們的名字。

+0

感謝這個詳細的答案,它啓發了整個事情。 (並看到第一篇文章對「適當的語法」的評論) –

+0

沒問題 - 這是一個古怪的問題,看看! :) – matlabgui