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

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

1、簡介

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

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

  • 而後按照從左到右,從上到下的順序對每一個子區域進行編號,左上的子區域的編號爲1函數

  • plotNum 參數指定建立的 Axes 對象所在的區域佈局

若是 numRows = 2, numCols = 3, 那整個繪製圖表樣式爲 2X3 的圖片區域, 用座標表示爲:spa

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

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

  • 若是 numRowsnumCols 和 plotNum 這三個數都小於 10 的話, 能夠把它們縮寫爲一個整數, 例如 subplot(323) 和 subplot(3,2,3) 是相同的.對象

  • subplot在 plotNum 指定的區域中建立一個軸對象. 若是新建立的軸和以前建立的軸重疊的話,以前的軸將被刪除.blog

2、參數說明

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函數。

3、示例

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()

效果:

相關文章
相關標籤/搜索