matlab中subplot 在平鋪位置創建坐標區


來源:https://ww2.mathworks.cn/help/matlab/ref/subplot.html?searchHighlight=subplot&s_tid=doc_srchtitle

 

說明

示例

subplot(m,n,p) 將當前圖窗划分為 m×n 網格,並在 p 指定的位置創建坐標區。MATLAB® 按行號對子圖位置進行編號。第一個子圖是第一行的第一列,第二個子圖是第一行的第二列,依此類推。如果指定的位置已存在坐標區,則此命令會將該坐標區設為當前坐標區。

示例

subplot(m,n,p,'replace') 刪除位置 p 處的現有坐標區並創建新坐標區。

subplot(m,n,p,'align') 創建新坐標區,以便對齊圖框。此選項為默認行為。

示例

subplot(m,n,p,ax) 將現有坐標區 ax 轉換為同一圖窗中的子圖。

示例

subplot('Position',pos)pos 指定的自定義位置創建坐標區。使用此選項可定位未與網格位置對齊的子圖。指定 pos 作為 [left bottom width height] 形式的四元素向量。如果新坐標區與現有坐標區重疊,新坐標區將替換現有坐標區。

subplot(___,Name,Value) 使用一個或多個名稱-值對組參數修改坐標區屬性。有關屬性列表,請參閱 Axes 屬性。在所有其他輸入參數之后設置坐標區屬性。

示例

ax = subplot(___) 返回創建的 Axes 對象。以后可以使用 ax 修改坐標區。有關屬性列表,請參閱 Axes 屬性

示例

subplot(ax)ax 指定的坐標區設為父圖窗的當前坐標區。如果父圖窗尚不是當前圖窗,此選項不會使父圖窗成為當前圖窗。

 

示例

全部折疊

上部和下部子圖

創建帶有兩個堆疊子圖的圖窗。在每個子圖上繪制一條正弦波。

subplot(2,1,1);
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)

subplot(2,1,2); y2 = sin(5*x); plot(x,y2)

 
 

子圖的象限

創建一個分為四個子圖的圖窗。在每個子圖上繪制一條正弦波並為每個子圖指定標題。

subplot(2,2,1)
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)
title('Subplot 1: sin(x)') subplot(2,2,2) y2 = sin(2*x); plot(x,y2) title('Subplot 2: sin(2x)') subplot(2,2,3) y3 = sin(4*x); plot(x,y3) title('Subplot 3: sin(4x)') subplot(2,2,4) y4 = sin(8*x); plot(x,y4) title('Subplot 4: sin(8x)')

 
 

大小不同的子圖

創建一個包含三個子圖的圖窗。在圖窗的上半部分創建兩個子圖,並在圖窗的下半部分創建第三個子圖。在每個子圖上添加標題。

subplot(2,2,1);
x = linspace(-3.8,3.8);
y_cos = cos(x);
plot(x,y_cos);
title('Subplot 1: Cosine') subplot(2,2,2); y_poly = 1 - x.^2./2 + x.^4./24; plot(x,y_poly,'g'); title('Subplot 2: Polynomial') subplot(2,2,[3,4]); plot(x,y_cos,'b',x,y_poly,'g'); title('Subplot 3 and 4: Both')

 
 

將子圖替換為空坐標區

創建一個包含四個隨機數據針狀圖的圖窗。然后將第二個子圖替換為空坐標區。

for k = 1:4
    data = rand(1,10);
    subplot(2,2,k)
    stem(data)
end

subplot(2,2,2,'replace')

 
 

自定義位置上的子圖

創建包含兩個未與網格位置對齊的子圖的圖窗。為每個子圖指定一個自定義位置。

pos1 = [0.1 0.3 0.3 0.3];
subplot('Position',pos1)
y = magic(4);
plot(y)
title('First Subplot') pos2 = [0.5 0.15 0.4 0.7]; subplot('Position',pos2) bar(y) title('Second Subplot')

 
 

創建包含極坐標區的子圖

創建包含兩個極坐標區的圖窗。在上部子圖中創建極坐標線圖,在下部子圖中創建極坐標散點圖。

figure
ax1 = subplot(2,1,1,polaraxes);
theta = linspace(0,2*pi,50);
rho = sin(theta).*cos(theta);
polarplot(ax1,theta,rho)

ax2 = subplot(2,1,2,polaraxes); polarscatter(ax2,theta,rho)

 
 

創建后修改坐標區屬性

創建帶有兩個子圖的圖窗。將 Axes 對象賦給變量 ax1ax2。將 Axes 對象指定為繪圖函數的輸入,以確保繪圖函數在特定的子圖中進行繪制。

ax1 = subplot(2,1,1);
Z = peaks;
plot(ax1,Z(1:20,:))

ax2 = subplot(2,1,2); plot(ax2,Z)

通過設置 Axes 對象的屬性來修改坐標區。更改上部子圖的字體大小和下部子圖的線寬。某些繪圖函數可設置坐標區屬性。先執行繪圖函數,然后指定坐標區屬性以免覆蓋現有坐標區屬性的設置。

注意:從 R2014b 開始,您可以使用圓點表示法設置屬性。如果您使用的是早期版本,請改用 set 函數。

ax1.FontSize = 15;
ax2.LineWidth = 2;

 
 

使子圖成為當前坐標區

創建一個包含多個子圖的圖窗。將 Axes 對象存儲在向量 ax 中。然后使第二個子圖成為當前坐標區。創建一個線圖並更改第二個子圖的坐標軸范圍。默認情況下,圖形函數作用於當前坐標區。

for k = 1:4
    ax(k) = subplot(2,2,k);
end

subplot(ax(2)) x = linspace(1,50); y = sin(x); plot(x,y,'Color',[0.1, 0.5, 0.1]) title('Second Subplot') axis([0 50 -1 1])

 
 

將現有坐標區轉換為子圖

創建一個線圖。然后轉換坐標區,使其成為圖窗的下部子圖。subplot 函數使用原始坐標區所在的圖窗。

x = linspace(1,10);
y = sin(x);
plot(x,y)
title('Sine Plot')

ax = gca;
subplot(2,1,2,ax)

 
 

將不同圖窗中的坐標區轉換為子圖

將位於不同圖窗中的坐標區合並到包含子圖的單個圖窗中。

在兩個不同的圖窗中創建兩個圖。將 Axes 對象賦給變量 ax1ax2。將 Legend 對象賦給變量 lgd

figure
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)
title('Line Plot 1')

ax1 = gca;

figure
y2 = 2*sin(x);
plot(x,y2)
title('Line Plot 2')
lgd = legend('2*Sin(x)');

ax2 = gca;

使用 copyobj 創建兩個 Axes 對象的副本。將復制的坐標區的父級指定為新圖窗。由於圖例和顏色欄不會隨相關坐標區一起復制,因此請隨坐標區一起復制圖例。

fnew = figure;
ax1_copy = copyobj(ax1,fnew);
subplot(2,1,1,ax1_copy)

copies = copyobj([ax2,lgd],fnew);
ax2_copy = copies(1);
subplot(2,1,2,ax2_copy)

輸入參數

全部折疊

m - 網格行數
1 (默認) | 正整數

網格行數,指定為正整數。

數據類型: single | double

n - 網格列數
1 (默認) | 正整數

網格列數,指定為正整數。

數據類型: single | double

p - 新坐標區的網格位置
標量 | 向量

新坐標區的網格位置,指定為標量或正整數向量。

  • 如果 p 是正整數標量,則 subplot 在網格位置 p 處創建一個子圖。

  • 如果 p 是正整數向量,則 subplot 新建一個跨 p 中列出的網格位置的子圖。

 

示例: subplot(2,3,1) 在位置 1 處創建一個子圖。

示例: subplot(2,3,[2,5]) 創建跨位置 2 和 5 的子圖。

示例: subplot(2,3,[2,6]) 創建跨位置 2、3、5 和 6 的子圖。

數據類型: single | double

pos - 新坐標區的自定義位置
四元素向量

新坐標區的自定義位置,指定為 [left bottom width height] 形式的四元素向量。

  • leftbottom 元素指定子圖的左下角相對於圖窗的左下角的位置。

  • widthheight 元素指定子圖維度。

指定介於 01 之間的歸一化值(基於圖窗內界)。

注意

使用腳本創建子圖時,在發出 drawnow 命令或 MATLAB 返回到等待用戶命令之前,MATLAB 不會最終確定 Position 屬性值。在腳本刷新繪圖或退出之前,子圖的 Position 屬性值會受到變化的影響。

示例: subplot('Position',[0.1 0.1 0.45 0.45])

數據類型: single | double

ax - 要設為當前坐標區或轉換為子圖的現有坐標區
Axes 對象 | PolarAxes 對象 | 圖形對象

要設為當前坐標區或轉換為子圖的現有坐標區,指定為 Axes 對象、PolarAxes 對象或具有 ActivePositionProperty 屬性的圖形對象,如 HeatmapChart 對象。

要在子圖位置創建空的極坐標區,請將 ax 指定為 polaraxes 函數,例如 subplot(2,1,2,polaraxes)

名稱-值對組參數

指定可選的、以逗號分隔的 Name,Value 對組參數。Name 為參數名稱,Value 為對應的值。Name 必須放在引號中。您可采用任意順序指定多個名稱-值對組參數,如 Name1,Value1,...,NameN,ValueN 所示。

示例: subplot(m,n,p,'XGrid','on')

有關您可以設置的屬性的列表,請參閱 Axes 屬性。某些繪圖函數會覆蓋屬性設置。請考慮在繪圖后設置坐標區屬性。

提示

  • 要清除圖窗的內容,請使用 clf。例如,您可以在創建新子圖布局之前清除圖窗中的現有子圖布局。

  • 要疊加坐標區,請改用 axes 命令。subplot 函數會刪除與新坐標區重疊的現有坐標區。例如,subplot('Position',[.35 .35 .3 .3]) 會刪除所有底層坐標區,但 axes('Position',[.35 .35 .3 .3]) 會將新坐標區置於圖窗的中部而不刪除底層坐標區。

  • subplot(111) 是一個例外,其行為與 subplot(1,1,1) 不同。出於向后兼容的原因,subplot(111) 是子圖的一種特殊情況,它不立即創建坐標區,而是設置圖窗,以便接下來的圖形命令執行 clf reset。接下來的圖形命令將刪除所有圖窗子級,並在默認位置創建新的坐標區。subplot(111) 不返回 Axes 對象,如果代碼指定了返回參數,將會發生錯誤。

另請參閱

函數

屬性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM