天天看點

Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

文章目錄

  • 一. 改變 x 軸顯示内容 xticks 方法再次說明
    • 1. x 軸是數值型資料
    • 2. 将 x 軸更改為字元串
    • 3. 總結
  • 二. 其他元素可視性
    • 1. 顯示網格:plt.grid()
    • 2. plt.gca( ) 對坐标軸的操作
  • 三. plt.rcParams 設定畫圖的分辨率,大小等資訊
  • 四. 圖表的樣式參數設定
    • 1. 線條樣式
    • 2. 線條樣式縮寫
  • 五. 建立圖形對象
  • 六. 繪制多子圖
    • 1. add_axes():添加區域
    • 2. subplot() 函數,它可以均等地劃分畫布
    • 3. 設定多圖的基本資訊方式
      • 3.1 在建立的時候直接設定
      • 3.2 使用 pyplot 子產品中的方法設定後再繪制
      • 3.3 使用傳回的區域對象設定
    • 4. subplots() 函數詳解
  • 在最開始,我們先引入 Matplotlib 庫,便于後續的操作。
from matplotlib import pyplot as plt
import numpy as np
           

一. 改變 x 軸顯示内容 xticks 方法再次說明

  • 第一個參數,需要一個數字清單,訓示 x 軸上的記号應該指向哪裡,我們向這個函數傳遞了一個字元串,但它并不知道如何将其轉換為 x 軸上的位置。

1. x 軸是數值型資料

  • 例如,我們使用 np.arange() 生成從 1991 年到 2020 年,30 年的日期資料。
dates = np.arange(1991,2021)
dates
#array([1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
#       2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
#       2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020])
           
  • 随後,我們再使用 np.random.randint() 随機生成這 30 年的銷量資料。
sales = np.random.randint(50,500,size=30)
sales
#array([150, 115,  52, 247, 113,  54, 204, 405, 245, 438, 251, 392, 222,
#       416, 388, 112, 250, 473, 444, 195, 147, 123, 136, 294, 240, 129,
#       290, 255, 381, 149])
           
  • 最後,我們将日期作為橫坐标,銷量作為縱坐标繪制銷量圖。
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 通過上述步驟我們可以發現,對于數值型數組,繪圖會自動分割。
  • 但是,如果想按照自己的邏輯分割,注意數值型對應軸上面的數值,比如,我們可以将 x 軸的刻度進行修改,并繪制銷量圖。
%matplotlib inline
plt.xticks([1980,1982,1993])
plt.plot(dates,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 目前會看到 x 軸上面沒有資料,其實是有資料,隻不過,預設目前圖形的 x 軸區間是 [1991,2021],對此,我們可以借助設定 %matplotlib notebook 移動圖像來檢視。
- %matplotlib notebook
plt.xticks([1980,1982,1993])
plt.plot(dates,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 如果我們想按照自己的邏輯分割,注意數值型使用的是元素本身,而不是元素的索引。
  • 如果我們直接使用元素本身就會産生如下現象。
plt.xticks([1990,2005,2010,2020]) 
plt.plot(dates,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 是以,如果我們想 x 軸刻度每兩年顯示一次的話,就需要使用元素的索引進行銷量圖的繪制。
plt.xticks(np.arange(dates.min(),dates.max()+2,2),rotation=45)
plt.plot(dates,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

那麼,對于上述的邏輯分割,我們也是可以使用元素本身的,隻不過需要一些計算。

plt.xticks([dates[i] for i in range(0,len(dates),2)]+[2020],rotation=45) # 元素本身
plt.plot(dates,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

2. 将 x 軸更改為字元串

  • 我們将從 1991 年到 2020 年,30 年的日期修改為字元串。
  • 這裡需要注意的是 xticks 第一個參數中元素不能我字元串 。
dates = np.arange(1991,2021).astype(np.str_)
plt.xticks(range(1,len(dates),2),rotation=45) # 元素本身
plt.plot(dates,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

3. 總結

  • (1) 當 x 軸是數值型,會按照數值型本身作為 x 軸的坐标。
  • (2) 當 x 軸為字元串類型,會按照索引作為 x 軸的坐标。
  • 具體可見如下例子:
time=np.arange(2000,2020).astype(np.str_)
sales = [109, 150, 172, 260, 273, 333, 347, 393, 402, 446, 466, 481, 499,504, 513, 563, 815, 900, 930, 961]
plt.xticks(range(0,len(time),2))##,labels=['year%s'%i for i in time],rotation=45,color="red")
plt.yticks(color="blue")
plt.plot(time,sales)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

二. 其他元素可視性

1. 顯示網格:plt.grid()

  • 顯示網格 plt.grid() 的參數有如下含義:
  • linestyle:線型。
  • color:顔色。
  • linewidth:寬度。
  • axis:x,y,both,顯示x/y/兩者的格網。
  • 例如,我們可以使用 np.linspace 生成從 -Π 到 Π 并且包含終止值的 256 個資料,并分别生成一個 cos 和 sin 函數。
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
c, s = np.cos(x), np.sin(x)
plt.plot(x, c)
plt.plot(x, s)
plt.grid(True,linestyle="--")
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

2. plt.gca( ) 對坐标軸的操作

  • 首先觀察畫布上面的坐标軸,如下圖。
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 上圖中,用紅色辨別出的黑色邊界框線在 Matplotlib 中被稱為 spines,中文翻譯為脊柱。
  • 在我的了解看來,意思是這些邊界框線是坐标軸區域的支柱,那麼,我們最終要挪動的其實就是這四個支柱,且所有的操作均在 plt.gca( ) 中完成,gca 就是 get current axes 的意思。
  • 接下來需要繪制圖如下:
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 首先,我們建立 x 軸資料,使用 np.arange( ) 生成從 -50 到 50 的 x 軸資料,再建立 y 軸的資料,y 是 x 的平方,并繪制圖形。
x = np.arange(-50,51)
y = x ** 2
plt.plot(x, y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 然後,我們擷取目前坐标軸,通過坐标軸 spines ,确定 top,bottom,left,right(分别表示上,下,左,右)。
  • 此時,我們需要的是坐标軸,是以,不需要右側和上側線條,将其顔色設定為 none。
x = np.arange(-50,51)
y = x ** 2
ax = plt.gca() 
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")​
plt.plot(x, y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 随後,我們在上述的基礎上,分别定義 x,y,擷取目前坐标軸移動下軸到指定位置,在這裡,position 位置參數有三種,data , outward(向外),axes。
  • axes 是 0.0 - 1.0 之間的值,按軸上的比例劃分。
  • data 表示按數值挪動,其後數字代表挪動到 Y 軸的刻度值。
  • 最後,在設定 y 的取值範圍,将兩個 0 點移動到一起。
x = np.arange(-50,51)
y = x ** 2
ax = plt.gca()
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")
ax.spines['left'].set_position(('axes',0.5))
plt.ylim(0, y.max()) 
plt.plot(x, y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

三. plt.rcParams 設定畫圖的分辨率,大小等資訊

  • plt.rcParams[‘figure.figsize’] = (8.0, 4.0) 是設定 figure_size 英寸。
  • plt.rcParams[‘figure.dpi’] = 300 是設定分辨率。
  • 預設的像素:[6.0,4.0],分辨率為 72,圖檔尺寸為 432x288。
  • 如果指定 dpi=100,則圖檔尺寸為 600*400。
  • 如果指定 dpi=300,則圖檔尺寸為 1800*1200。
  • 針對上述,我們進行如下的樣例示範。
  • (1) 分辨率為 72,圖檔尺寸為 432x288(預設值)。
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • (2) 将大小設定為 (6.0,4.0) 英寸。
plt.rcParams['figure.figsize'] = (6.0, 4.0)
plt.plot()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • (3) 指定 dpi=100,圖檔尺寸為 600*400。
plt.rcParams['figure.dpi'] = 100
plt.plot()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 将大小設定為 (3,2) 英寸(注意橫縱坐标的刻度也發生了變化)。
plt.rcParams['figure.figsize']=(3,2)
plt.plot()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

四. 圖表的樣式參數設定

1. 線條樣式

  • 傳入 x,y,通過 plot 畫圖,并設定折線顔色、透明度、折線樣式和折線寬度,标記點、标記點大小、标記點邊顔色、标記點邊寬,網格等。
  • (1) color:可以使用顔色的 16 進制,也可以使用線條顔色的英文,還可是使用之前的縮寫。
字元 顔色 英文全稱
‘b’ 藍色 blue
‘g’ 綠色 green
’ r ’ 紅色 red
’ c ’ 青色 cyan
’ m ’ 品紅 magenta
’ y ’ 黃色 yellow
’ k ’ 黑色 black
’ w ’ 白色 white
  • (2) alpha:0-1,透明度。
  • (3) linestyle:折線樣式。
字元 描述
‘-’ 實線
‘–’ 虛線
‘-.’ 點劃線
‘:’ 虛線
  • (4) marker 标記點:。
标記符号 描述
‘.’ 點标記
‘o’ 圓圈标記
‘x’ 'X’标記
‘D’ 鑽石标記
‘H’ 六角标記
‘s’ 正方形标記
‘+’ 加号标記
  • 例如如下應用:
x= np.arange(0, 100,10)
y= x ** 2
"""linewidth 設定線條粗細
   label 設定線條标簽
   color 設定線條顔色
   linestyle 設定線條形狀
   marker 設定線條樣點标記
"""
plt.plot(x, y, linewidth = '2', label = "test", color='b', linestyle='--', marker='H')
plt.legend(loc='upper left')
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

2. 線條樣式縮寫

  • 我們可以設定兩條曲線,第一個是紅色,點劃線;第二個是品紅,虛線。
  • 将他們的線條樣式進行縮寫。
plt.plot([1,2,3],[4,7,6],'r*-.')
plt.plot([2,4,5],[3,8,7],'m+--')
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 除此之外,我們也可以多設定幾種線條樣式的組合,并将他們添加到圖例當中。
plt.rcParams['figure.figsize']=(8,4)
x=np.linspace(0,10,100)​
plt.plot(x,x+0, '-g', label='-g') ​
plt.plot(x,x+1, '--c', label='--c')  ​
plt.plot(x,x+2, '-.k', label='-.k')​
plt.plot(x,x+3, '-r', label='-r') ​
plt.plot(x,x+4, 'o', label='o')  ​
plt.plot(x,x+5, 'x', label='x')  ​
plt.plot(x,x+6, 'dr', label='dr')  ​
plt.legend(loc='lower right',framealpha=0.5,shadow=True, borderpad=0.5)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

五. 建立圖形對象

  • 在 Matplotlib 中,面向對象程式設計的核心思想是建立圖形對象(figure object)。
  • 通過圖形對象來調用其它的方法和屬性,這樣有助于我們更好地處理多個畫布。
  • 在這個過程中,pyplot 負責生成圖形對象,并通過該對象來添加一個或多個 axes 對象(即繪圖區域)。
  • Matplotlib 提供了 matplotlib.figure 圖形類子產品,它包含了建立圖形對象的方法。通過調用 pyplot 子產品中 figure() 函數來執行個體化 figure 對象。
  • 其參數具有如下含義:
  • num 表示圖像編号或名稱,數字為編号,字元串為名稱。
  • figsize 表示指定 figure 的寬和高,機關為英寸。
  • dpi 表示定繪圖對象的分辨率,即每英寸多少個像素,預設值為 72。
  • facecolor 表示背景顔色。
  • edgecolor 表示邊框顔色。
  • frameon 表示是否顯示邊框。
  • 具體可見如下例子。
  • 建立圖形對象,就相當于我們建立一個畫布。
  • 之前通過配置更改圖形的分辨率和寬高.。現在可以在建立圖像對象的時候建立。
from matplotlib import pyplot as plt
fig = plt.figure()
​fig = plt.figure('f1',figsize=(3,2),dpi=100)
x = np.arange(0,50)
y = x ** 2
plt.plot(x,y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 然後,我們建立圖形對象,圖形對象的分辨率為 100,背景顔色為:灰色,并擷取軸。
x = np.arange(0,50)
y = x ** 2
fig = plt.figure('f1',figsize=(4,2), dpi=100,facecolor='gray')
ax = plt.gca()
ax.plot(x,y)
plt.plot(x,y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

六. 繪制多子圖

  • figure 是繪制對象(可了解為一個空白的畫布),一個 figure 對象可以包含多個 Axes 子圖,一個 Axes 是一個繪圖區域,不加設定時,Axes 值預設為 1,且每次繪圖其實都是在 figure 上的 Axes 上繪圖。
  • 我們是在圖形對象上面的 Axes 區域進行作畫。
  • 接下來我們将學習繪制子圖的幾種方式:
  • (1) add_axes():添加區域。
  • (2) subplot():均等地劃分畫布,隻是建立一個包含子圖區域的畫布,(傳回區域對象)。
  • (3) subplots():既建立了一個包含子圖區域的畫布,又建立了一個 figure 圖形對象(傳回圖形對象和區域對象)。

1. add_axes():添加區域

  • Matplotlib 定義了一個 axes 類(軸域類),該類的對象被稱為 axes 對象(即軸域對象),它指定了一個有數值範圍限制的繪圖區域。在一個給定的畫布(figure)中可以包含多個 axes 對象,但是同一個 axes 對象隻能在一個畫布中使用。
  • 2D 繪圖區域(axes)包含兩個軸(axis)對象
  • 其文法如下:
  • 該方法用來生成一個 axes 軸域對象,對象的位置由參數 rect 決定。
  • rect 是位置參數,接受一個由 4 個元素組成的浮點數清單,形如 [left, bottom, width, height] ,它表示添加到畫布中的矩形區域的左下角坐标 (x, y),以及寬度和高度。
  • 如下所示:
  • ax1 從畫布起始位置繪制,寬高和畫布一緻;ax2 從畫布 20% 的位置開始繪制, 寬高是畫布的 50%。
fig = plt.figure(figsize=(4,2),facecolor='g')
​ax1=fig.add_axes([0,0,1,1])
​ax2=fig.add_axes([0.1,0.6,0.3,0.3])
​ax3=fig.add_axes([0.5,0.6,0.2,0.3])
ax1.plot(x, y)
ax2.plot(x, y)
ax3.plot(x, y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 注意:每個元素的值是畫布寬度和高度的分數。即将畫布的寬、高作為 1 個機關。比如,[ 0.2, 0.2, 0.5, 0.5],它代表着從畫布 20% 的位置開始繪制, 寬高是畫布的 50%
  • 我們建立 ax1,和畫布位置一緻;ax2 從畫布 40% 的位置開始繪制, 寬高是畫布的 50%
fig = plt.figure(figsize=(4,2),facecolor='g')​
x = np.arange(0,50,2)
y = x ** 2
ax1 = fig.add_axes([0.0,0.0,1,1])
​ax1.plot(x,y)
​ax2=fig.add_axes([0.4,0.4,0.3,0.3])
​ax2.plot(x,y)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 其中區域中基本方法的使用如下:
  • 區域圖表名稱:set_title。
  • 區域中 x 軸和 y 軸名稱:set_xlabel() 和 set_ylabel()。
  • 刻度設定:set_xticks()。
  • 區域圖表圖例:legend()。

2. subplot() 函數,它可以均等地劃分畫布

  • 其參數格式如下:
  • nrows 表示行。
  • ncols 表示列。
  • index 表示索引。
  • kwargs 表示 title/xlabel/ylabel 等。
  • 也可以直接将幾個值寫到一起,例如:subplot(233)。
  • 傳回:區域對象。
  • nrows 與 ncols 表示要劃分幾行幾列的子區域(nrows*nclos表示子圖數量),index 的初始值為1,用來標明具體的某個子區域。
  • 例如: subplot(233) 表示在目前畫布的右上角建立一個兩行三列的繪圖區域(如下圖所示),同時,選擇在第 3 個位置繪制子圖。
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 如果建立的子圖與現有的子圖重疊,那麼重疊部分的子圖将會被自動删除,因為它們不可以共享繪圖區域。
  • 現在建立一個子圖,它表示一個有 1 行 2 列的網格的頂部圖。引為這個子圖将與第一個重疊,是以之前建立的圖将被删除,x 可省略,預設 [0,1…,N-1] 遞增。
plt.plot([1,2,3])
plt.subplot(211)
plt.plot(range(50,70))​
plt.subplot(212)​
plt.plot(np.arange(12)**2)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

- 如果不想覆寫之前的圖,需要先建立畫布。還可以先設定畫布的大小,再通過畫布建立區域。

fig = plt.figure(figsize=(4,2))​
fig.add_subplot(111)​
plt.plot(range(20))​
fig.add_subplot(221)​
plt.plot(range(12))
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

3. 設定多圖的基本資訊方式

3.1 在建立的時候直接設定

  • 對于 subplot 關鍵詞指派參數的了解,可以将光标移動到 subplot 方法上,使用快捷鍵 shift+tab 檢視具體内容。
  • 現在建立一個子圖,它表示一個有 2 行 1 列的網格的頂部圖。x 可省略,預設 [0,1…,N-1] 遞增。
plt.subplot(211,title="pic1", xlabel="x axis")
plt.plot(range(50,70))​
plt.subplot(212, title="pic2", xlabel="x axis")​
plt.plot(np.arange(12)**2)
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖
  • 發現子圖示題重疊,在最後使用 plt.tight_layout()。
plt.subplot(211,title="pic1", xlabel="x axis")
plt.plot(range(50,70))
​plt.subplot(212, title="pic2", xlabel="x axis")​
plt.plot(np.arange(12)**2)
plt.tight_layout()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

3.2 使用 pyplot 子產品中的方法設定後再繪制

​plt.subplot(211)
plt.title("ax1")
plt.plot(range(50,70))
​plt.subplot(212)
plt.title("ax2")
plt.plot(np.arange(12)**2)
plt.tight_layout()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

3.3 使用傳回的區域對象設定

  • 注意區域對象的方法很多都是 set_ 開頭。
ax1 = plt.subplot(211)
ax1.set_title("ax1")
ax1.plot(range(50,70))
​ax2 = plt.subplot(212)
ax2.set_title("ax2")
​ax2.plot(np.arange(12)**2)
plt.tight_layout()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖

4. subplots() 函數詳解

  • matplotlib.pyplot 子產品提供了一個 subplots() 函數,它的使用方法和 subplot() 函數類似。其不同之處在于,subplots() 既建立了一個包含子圖區域的畫布,又建立了一個 figure 圖形對象,而 subplot() 隻是建立一個包含子圖區域的畫布。
  • subplots 的函數格式如下:
  • nrows 與 ncols 表示兩個整數參數,它們指定子圖所占的行數、列。
  • 函數的傳回值是一個元組,包括一個圖形對象和所有的 axes 對象。其中 axes 對象的數量等于 nrows * ncols,且每個 axes 對象均可通過索引值通路(從 0 開始)。
  • 下面我們建立了一個 2 行 2 列的子圖,并在每個子圖中顯示 4 個不同的圖像。
  • 第一幅圖像就是 (0,0),顯示的是 x 2 x^{2} x2;第二幅圖像就是 (0,1),顯示的是 x \sqrt{x} x

    ​;第三幅圖像就是 (1,0),顯示的是 e x e^{x} ex;第四幅圖像就是 (1,1),顯示的是 log ⁡ 10 x \log_{10}{x} log10​x。

import matplotlib.pyplot as plt
import numpy as np
fig, axes =  plt.subplots(2,2)​
x = np.arange(1,5)
axes[0][0].plot(x, x*x)
axes[0][0].set_title('square')
axes[0][1].plot(x, np.sqrt(x))
axes[0][1].set_title('square root')
axes[1][0].plot(x, np.exp(x))
axes[1][0].set_title('exp')
axes[1][1].plot(x,np.log10(x))
axes[1][1].set_title('log')
​plt.tight_layout()
​plt.show()
           
Python 之 Matplotlib xticks 的再次說明、圖形樣式和子圖一. 改變 x 軸顯示内容 xticks 方法再次說明二. 其他元素可視性三. plt.rcParams 設定畫圖的分辨率,大小等資訊四. 圖表的樣式參數設定五. 建立圖形對象六. 繪制多子圖