2013-07-28 41 views
2

這應該很簡單 - 但它看起來不是。我只想擁有一個五個副圖相鄰的數字 - 兩者之間沒有空格。另外,第一個棘手的部分可能是我想要第一個使用floatAxisX的子圖。5x1副圖彼此相鄰 - 爲什麼我總是有前兩個消失?

比方說,我有四個變量:

x1 = salinity 
x2 = temperature 
x3 = density 
y = depth 

所以我的代碼如下所示:

figure; 
hfig = figure('Name','xxx'); 
set(gcf,'Position',get(0,'ScreenSize')) 
set(hfig,'color','w'); 

subplot(151);set(subplot(151),'Position',[0.15 0.15 0.15 0.75]); 

    % plot salinity vs depth 
    hl1=plot(x1,y,'k-'); 
    % assign current axis handle to variable for later reference if needed 
    ax1=gca; 
    % set properties of the axes 
    set(ax1,'XMinorTick','on','ydir','reverse', 'ytick',[0:25:150],'box','on','xcolor',get(hl1,'color')) 

    % add 1st floating axis for the second parameter (temperature) plotted 
     [hl2,ax2,ax3] = floatAxisX(x2,y,'r:','Temperature (C)',[5 15 0 150]); 
     set(ax2,'ydir','reverse','ytick',[0:25:150]) 

    % add 2nd floating axis for the third parameter (density) plotted 
     [hl3,ax4,ax5] = floatAxisX(x3,y,'b--','Density (Kg m^-^3)',[24 27 0 150]); 
     set(ax4,'ydir','reverse','ytick',[0:25:150]); 

subplot(152);set(subplot(152),'Position',[0.31 0.35 0.15 0.55]); 

例如,我有不同的情節放在一起使用hold on

 plot(x1,y);axis ij; 

subplot(153);set(subplot(153),'Position',[0.46 0.35 0.15 0.55]); 

     plot(x1,y);axis ij; 

subplot(154);set(subplot(154),'Position',[0.61 0.35 0.15 0.55]); 

     plot(x1,y);axis ij; 

subplot(155);set(subplot(155),'Position',[0.76 0.35 0.15 0.55]); 

     plot(x1,y);axis ij; 

請注意,只需執行以下操作

subplot(151);set(subplot(151),'Position',[0.15 0.15 0.15 0.75]); 
subplot(152);set(subplot(152),'Position',[0.31 0.35 0.15 0.55]); 
subplot(153);set(subplot(153),'Position',[0.46 0.35 0.15 0.55]); 
subplot(154);set(subplot(154),'Position',[0.61 0.35 0.15 0.55]); 
subplot(155);set(subplot(155),'Position',[0.76 0.35 0.15 0.55]); 

只給了我一個數字與最後三個子圖彼此相鄰。我將很感激爲什麼會發生這種情況以及如何解決這個問題。

+0

我認爲你真正的問題是關於代碼的最後幾行,它簡潔地演示你的問題。我不確定所有其他的都有幫助 - 你的問題可以縮短。 – horchler

+0

我不確定它是否正是你要找的東西,但你可以查看['plotmatrix'](http://www.mathworks.com/help/matlab/ref/plotmatrix.html)函數。這是特定的散點圖,並有其他功能,你可能不希望。但是,我認爲它包含在所有的Matlab安裝中。看看例子。並嘗試'x = randn(50,5); y = 1:50; plotmatrix(X,Y」, ' - ')'; – horchler

+0

我的答案最終[解決您的問題](http://stackoverflow.com/help/accepted-answer)? – horchler

回答

3

從幫助subplot

如果次要情節規範使新的軸重疊的
存在的軸,在現有的軸被刪除 - 除非這個新的和現有的軸的位置
是相同的。

你的代碼是這樣做的,儘管你可能沒有意識到它。您可以撥打subplot(151),將軸放置在默認位置,然後手動定位。因爲您已經手動定位了第一個軸,所以調用subplot(152)與調用subplot(151)相同,並且新軸結束於第一個軸的頂部,導致後者被刪除。依此類推,直到將軸移動到放置默認軸的區域。

有幾種解決方法。您可以創建所有的子圖,然後返回並定位它們。您可以從圖的右側開始創建子圖(subplot(155))並向左移動。或者你也可以直接通過建立在需要的位置次要情節:

subplot('Position',[0.15 0.15 0.15 0.75]); 
subplot('Position',[0.31 0.35 0.15 0.55]); 
subplot('Position',[0.46 0.35 0.15 0.55]); 
subplot('Position',[0.61 0.35 0.15 0.55]); 
subplot('Position',[0.76 0.35 0.15 0.55]); 

你可以擁有這些返回處理,如果你需要在以後的時間通過plot(AX,...)subplot(AX); plot(...),其中AX是一個軸柄分別繪製這些軸。

另請注意,subplot幫助包含了subplot(151)風格特殊的意見,尤其是:

這句法不返回的句柄,所以它是指定返回參數錯誤。

我得到一個自己的句柄,但我不知道它是否值得信賴。不過,即使將風格改爲subplot(1,5,1)也只是顯示最後三個問題仍然存在。

+0

好的 - 非常感謝 - 我仍然沒有正確理解這些句柄,我想.. – sophie