Python3 matplotlib的繪圖函數subplot()簡介


Python3 matplotlib的繪圖函數subplot()簡介

一、簡介

matplotlib下, 一個 Figure 對象可以包含多個子圖(Axes), 可以使用 subplot() 快速繪制, 其調用形式如下 :

subplot(numRows, numCols, plotNum)
  • 圖表的整個繪圖區域被分成 numRows 行和 numCols 列

  • 然后按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1

  • plotNum 參數指定創建的 Axes 對象所在的區域

如果 numRows = 2, numCols = 3, 那整個繪制圖表樣式為 2X3 的圖片區域, 用坐標表示為:

(1, 1), (1, 2), (1, 3)
(2, 1), (2, 2), (2, 3)

這時, 當 plotNum = 3 時, 表示的坐標為(1, 3), 即第一行第三列的子圖

  • 如果 numRowsnumCols 和 plotNum 這三個數都小於 10 的話, 可以把它們縮寫為一個整數, 例如 subplot(323) 和 subplot(3,2,3) 是相同的.

  • subplot在 plotNum 指定的區域中創建一個軸對象. 如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除.

二、參數說明

1,subplots()參數

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

創建一個畫像(figure)和一組子圖(subplots)。
這個實用程序包裝器可以方便地在單個調用中創建子圖的公共布局,包括封閉的圖形對象。

輸入參數說明:
  nrows,ncols:整型,可選參數,默認為1。表示子圖網格(grid)的行數與列數。
  sharex,sharey:布爾值或者{'none','all','row','col'},默認:False
       控制x(sharex)或y(sharey)軸之間的屬性共享:
          1.True或者'all':x或y軸屬性將在所有子圖(subplots)中共享.
          2.False或'none':每個子圖的x或y軸都是獨立的部分
             3.'row':每個子圖在一個x或y軸共享行(row)
                4.'col':每個子圖在一個x或y軸共享列(column)
  當子圖在x軸有一個共享列時('col'),只有底部子圖的x tick標記是可視的。
  同理,當子圖在y軸有一個共享行時('row'),只有第一列子圖的y tick標記是可視的。
  squeeze:布爾類型,可選參數,默認:True。
                * 如果是True,額外的維度從返回的Axes(軸)對象中擠出。
                    》如果只有一個子圖被構建(nrows=ncols=1),結果是單個Axes對象作為標量被返回。
                    》對於N*1或1*N個子圖,返回一個1維數組。
                    》對於N*M,N>1和M>1返回一個2維數組。
                *如果是False,不進行擠壓操作:返回一個元素為Axes實例的2維數組,即使它最終是1x1。
  subplot_kw:字典類型,可選參數。把字典的關鍵字傳遞給add_subplot()來創建每個子圖。
  gridspec_kw字典類型,可選參數。把字典的關鍵字傳遞給GridSpec構造函數創建子圖放在網格里(grid)。
  **fig_kw:把所有詳細的關鍵字參數傳給figure()函數

返回結果:
  fig:matplotlib.figure.Figure對象
  ax:Axes(軸)對象或Axes(軸)對象數組。

2,figure()參數

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)

創建一個新的畫布(figure)。
輸入參數:
  num:整型或者字符串,可選參數,默認:None。
       如果不提供該參數,一個新的畫布(figure)將被創建而且畫布數量將會增加。
          如果提供該參數,帶有id的畫布是已經存在的,激活該畫布並返回該畫布的引用。
               如果這個畫布不存在,創建並返回畫布實例。
               如果num是字符串,窗口標題將被設置為該圖的數字。
  figsize:整型元組,可選參數 ,默認:None。
              每英寸的寬度和高度。如果不提供,默認值是figure.figsize。
  dpi:整型,可選參數,默認:None。每英寸像素點。如果不提供,默認是figure.dpi。
  facecolor:背景色。如果不提供,默認值:figure.facecolor。
  edgecolor:邊界顏色。如果不提供,默認值:figure.edgecolor。
  framemon:布爾類型,可選參數,默認值:True。如果是False,禁止繪制畫圖框。
  FigureClass:源於matplotlib.figure.Figure的類。(可選)使用自定義圖實例。
  clear:布爾類型,可選參數,默認值:False。如果為True和figure已經存在時,這是清理掉改圖。
返回值:
  figure:Figure。返回的Figure實例也將被傳遞給后端的new_figure_manager,這允許將自定義的圖類掛接到pylab接口中。 

       附加的kwarg將被傳遞給圖形init函數。

三、示例

1,規則划分成3*3

代碼:

import matplotlib
import matplotlib.pyplot as plt
 
if __name__ == '__main__':
    for i,color in enumerate("rgby"):
        plt.subplot(221+i, facecolor=color) #背景色設置facecolor
    plt.show()

效果:

2,不規則划分

不規則划分

將整個表按照 2*2 划分 
前兩個簡單, 分別是 (2, 2, 1) 和 (2, 2, 2)

但是第三個圖呢, 他占用了 (2, 2, 3) 和 (2, 2, 4)

顯示需要對其重新划分, 按照 2 * 1 划分

前兩個圖占用了 (2, 1, 1) 的位置

因此第三個圖占用了 (2, 1, 2) 的位置

代碼:

import matplotlib.pyplot as plt
import numpy as np

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)
 
if __name__ == '__main__' :
    t1 = np.arange(0, 5, 0.1)
    t2 = np.arange(0, 5, 0.02)
 
    plt.figure(12)
    plt.subplot(221)
    plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--')
 
    plt.subplot(222)
    plt.plot(t2, np.cos(2 * np.pi * t2), 'r--')
 
    plt.subplot(212)
    plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
 
    plt.show()

效果:

 


免責聲明!

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



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