使用`Matplotlib`對分析結果可視化時,比較各類分析結果是常見的場景。在這類場景之下,將多個分析結果繪製在一張圖上,可以幫助用戶方便地組合和分析多個數據集,提高數據可視化的效率和準確性。 本篇介紹`Matplotlib`繪製子圖的常用方式和技巧。 # 1. 添加子圖的方式 添加子圖主要有兩種 ...
使用Matplotlib
對分析結果可視化時,比較各類分析結果是常見的場景。
在這類場景之下,將多個分析結果繪製在一張圖上,可以幫助用戶方便地組合和分析多個數據集,提高數據可視化的效率和準確性。
本篇介紹Matplotlib
繪製子圖的常用方式和技巧。
1. 添加子圖的方式
添加子圖主要有兩種方式,
一種是函數式風格:(也就是上一篇畫布中介紹的方式)
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
x = np.array(range(0, 8))
fig = plt.figure(figsize=[6,4])
fig.add_subplot(211) # 2行1列的第一個
y = np.random.randint(1, 100, 8)
plt.plot(x, y)
fig.add_subplot(212) # 2行1列的第二個
y = np.random.randint(1, 100, 8)
plt.plot(x, y)
另一種是面向對象風格:(使用 Axes
對象)
x = np.array(range(0, 8))
fig, ax = plt.subplots(1, 2) # 設置子圖1行2列
y = np.random.randint(1, 100, 8)
ax[0].plot(x, y)
y = np.random.randint(1, 100, 8)
ax[1].plot(x, y)
上面設置好子圖的佈局之後,添加子圖的順序是從上到下,從左到右。
2. 子圖的佈局
子圖的佈局是按照行列設置的,設置之後,相應的位置可以添加子圖。
x = np.array(range(0, 8))
rows, cols = 2, 2 # 2行2列,4個子圖
fig, ax = plt.subplots(rows, cols)
for i in range(rows):
for j in range(cols):
y = np.random.randint(1, 100, 8)
ax[i, j].plot(x, y) # i,j定位子圖的位置
子圖按照網格佈局時,我們看到上面4個子圖的Y軸刻度不一樣,這樣不利於比較。
x = np.array(range(0, 8))
rows, cols = 2, 2 # 2行2列,4個子圖
fig, ax = plt.subplots(rows, cols, sharey='all')
for i in range(rows):
for j in range(cols):
y = np.random.randint(1, 100, 8)
ax[i, j].plot(x, y) # i,j定位子圖的位置
設置 sharey='all'
之後,Y軸刻度保持一致,這樣比較曲線才有意義。
上面的示例中 X軸刻度是一致的,如果不一致,可以用 sharex
屬性來設置。
3. 複雜的佈局
3.1. 不規則的網格
除了規則的網格佈局,還可以通過 GridSpec 設置不規則的網格。
比如:
rows, cols = 3, 3
grid = plt.GridSpec(rows, cols)
plt.subplot(grid[0, :2])
plt.subplot(grid[0, 2])
plt.subplot(grid[1, 0])
plt.subplot(grid[1, 1:])
plt.subplot(grid[2, :])
上例中設置了3行3列的網格,但是不是每個圖形占用幾個網格是可以調整的。
3.2. 嵌套圖形
除了網格,還可以通過相對定位的方式來繪製多個子圖。
fig = plt.figure()
fig.add_axes([0.1, 0.1, 1, 1])
fig.add_axes([0.3, 0.3, 0.3, 0.3])
fig.add_axes([0.7, 0.6, 0.3, 0.2])
上面按相對位置添加子圖的函數 add_axes
的參數是一個4元列表。
這個列表4個元素的含義:
- 第一個元素表示子圖左下角距離畫布左邊的距離占畫布總寬度的比例
- 第二個元素表示子圖左下角距離畫布底邊的距離占畫布總高度的比例
- 第三個元素表示子圖寬度占畫布總寬度的比例
- 第三個元素表示子圖高度占畫布總高度的比例
註意,這裡的4個值都是比例。
4. 總結回顧
Matplotlib
中的每個子圖可以有自己的標簽、大小、位置和樣式,可以方便地組合成一個複雜的圖形。
我們一般在下列場景中使用子圖:
- 數據可視化:將多個數據集在同一張圖中顯示,進行對比和分析。
- 圖表組合:將多個圖表組合在一起,形成一個綜合性的圖形。
- 數據分析:將多個數據集在同一張圖中顯示,進行篩選和篩選。
- 可視化規範化:將多個來源不同的數據集在同一張圖中顯示,保證圖形的一致性和準確性。