如何在 Matplotlib 中改變子圖的大小和間距

Suraj Joshi 2023年1月30日 2020年6月9日
  1. tight_layout() 方法更改 Matplotlib 子圖大小和間距
  2. plt.subplots_adjust() 方法更改 Matplotlib 子圖間距
  3. plt.subplot_tool() 方法更改 Matplotlib 子圖大小和間距
  4. 在子圖中啟用 constrained_layout=True
如何在 Matplotlib 中改變子圖的大小和間距

我們可以使用 tight_layout()subplots_adjust()subplot_tool() 方法來更改 Matplotlib 中許多子圖的子圖大小或間距。我們還可以通過在 subplots() 函式中設定 constrained_layout=True 來更改子圖間距。

tight_layout() 方法更改 Matplotlib 子圖大小和間距

tight_layout() 方法會自動保持子圖之間的正確間距。

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-3,3,100)
y1=np.sin(x)
y2=np.cos(x)
y3=1/(1+np.exp(-x))
y4=np.exp(x)

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[1, 0].plot(x, y3)
ax[1, 1].plot(x,y4)

ax[0, 0].set_title("Sine function")
ax[0, 1].set_title("Cosine function")
ax[1, 0].set_title("Sigmoid function")
ax[1, 1].set_title("Exponential function")

fig.tight_layout()
plt.show()

使用 tight_layout 改進許多子圖的子圖大小

如果我們不使用 tight_layout() 方法,則一行將與下一行的標題重疊。

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-3,3,100)
y1=np.sin(x)
y2=np.cos(x)
y3=1/(1+np.exp(-x))
y4=np.exp(x)

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[1, 0].plot(x, y3)
ax[1, 1].plot(x,y4)

ax[0, 0].set_title("Sine function")
ax[0, 1].set_title("Cosine function")
ax[1, 0].set_title("Sigmoid function")
ax[1, 1].set_title("Exponential function")

plt.show()

不使用 tight_layout 的子圖

plt.subplots_adjust() 方法更改 Matplotlib 子圖間距

我們可以使用 plt.subplots_adjust() 方法來更改子圖之間的間距。

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-3,3,100)
y1=np.sin(x)
y2=np.cos(x)
y3=1/(1+np.exp(-x))
y4=np.exp(x)

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[1, 0].plot(x, y3)
ax[1, 1].plot(x,y4)

ax[0, 0].set_title("Sine function")
ax[0, 1].set_title("Cosine function")
ax[1, 0].set_title("Sigmoid function")
ax[1, 1].set_title("Exponential function")

plt.subplots_adjust(left=0.125,
                    bottom=0.1, 
                    right=0.9, 
                    top=0.9, 
                    wspace=0.2, 
                    hspace=0.35)

plt.show()

使用 plt.subplots_adjust 更改許多子圖的子圖間距

plt.subplots_adjust(left=0.125,
                    bottom=0.1, 
                    right=0.9, 
                    top=0.9, 
                    wspace=0.2, 
                    hspace=0.35)

wspacehspace 指定子圖之間保留的空間。它們分別是軸的寬度和高度的分數。

leftrighttopbottom 引數指定了子圖的四個邊的位置。它們是圖形的寬度和高度的比例。

plt.subplot_tool() 方法更改 Matplotlib 子圖大小和間距

此方法將啟動圖形的子圖工具視窗。

import numpy as np
import matplotlib.pyplot as plt

im1=np.random.random((50,50))
im2=np.random.random((40,50))
im3=np.random.random((50,40))
im4=np.random.random((60,50))

plt.subplot(221)
plt.imshow(im1)
plt.subplot(222)
plt.imshow(im2)
plt.subplot(223)
plt.imshow(im3)
plt.subplot(224)
plt.imshow(im4)

plt.subplot_tool()
plt.show()

使用 plt.subplots_adjust 改善許多子圖的子圖間距

它為使用者提供了一種互動式方法來拖動 subplot_tool 中的條以更改子圖的佈局。

在子圖中啟用 constrained_layout=True

constrained_layout 會自動調整子圖和裝飾,使其儘可能地適合圖中。

必須在建立子圖之前或期間啟用 constrained_layout,因為它會在每個繪製步驟之前優化佈局。

import numpy as np
import matplotlib.pyplot as plt

a=np.linspace(0,5,100)

figure, axes = plt.subplots(2,2, constrained_layout=True)

axes[0, 0].plot(x, np.exp(a))
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(range(10))

axes[0, 0].set_title("subplot 1")
axes[0, 1].set_title("subplot 2")
axes[1, 0].set_title("subplot 3")
axes[1, 1].set_title("subplot 4")

plt.show()

通過啟用 constrained_layout 的許多子圖來改善子圖間距

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Matplotlib Subplot