1. 共享單一繪圖區域的坐標軸
有時候,我們想將多張圖形放在同一個繪圖區域,不想在每個繪圖區域只繪制一幅圖形。這時候,就可以借助共享坐標軸的方法實現在一個繪圖區域繪制多幅圖形的目的。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串
fig, ax1 = plt.subplots()
t = np.arange(0.05, 10., 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, c="b", ls="-")
ax1.set_xlabel("x坐標軸")
ax1.set_ylabel("以e為底的指數", color="b")
ax1.tick_params("y", colors="b")
ax2 = ax1.twinx()
s2 = np.cos(t ** 2)
ax2.plot(t, s2, c="r", ls=":")
ax2.set_ylabel("余弦函數", color="r")
ax2.tick_params("y", colors="r")
plt.show()

同樣可以用
twiny()
方法共享y軸
2. 共享不同子區繪圖區域的坐標軸
subplots()
函數有兩個命名關鍵字參數sharex
和sharey
,有四種取值
'row'
'col'
'all'
,等同於True
'none'
,等同於False
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串
x1 = np.linspace(0, 2 * np.pi, 400)
y1 = np.cos(x1 ** 2)
x2 = np.linspace(0.01, 10, 100)
y2 = np.sin(x2)
x3 = np.random.rand(100)
y3 = np.linspace(0, 3, 100)
x4 = np.arange(0, 6, 0.5)
y4 = np.power(x4, 3)
fig, ax = plt.subplots(2, 2)
ax1 = ax[0, 0]
ax1.plot(x1, y1)
ax2 = ax[0, 1]
ax2.plot(x2, y2)
ax3 = ax[1, 0]
ax3.scatter(x3, y3)
ax4 = ax[1, 1]
ax4.scatter(x4, y4)
plt.show()
基本圖形如圖所示:

sharex='all'

sharex='none'

sharex='row'

sharex='col'

sharey
類似
將共享坐標軸的子區之間的空隙去掉
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串
x1 = np.linspace(0, 2 * np.pi, 400)
y1 = np.cos(x1 ** 2)
x2 = np.linspace(0.01, 10, 100)
y2 = np.sin(x2)
x3 = np.random.rand(100)
y3 = np.linspace(0, 3, 100)
x4 = np.arange(0, 6, 0.5)
y4 = np.power(x4, 3)
fig, ax = plt.subplots(2, 2, sharex='all', sharey='all')
fig.subplots_adjust(hspace=0, wspace=0)
ax1 = ax[0, 0]
ax1.plot(x1, y1)
ax2 = ax[0, 1]
ax2.plot(x2, y2)
ax3 = ax[1, 0]
ax3.scatter(x3, y3)
ax4 = ax[1, 1]
ax4.scatter(x4, y4)
plt.show()

3. 共享個別子區繪圖區域的坐標軸
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串
x1 = np.linspace(0, 2 * np.pi, 400)
y1 = np.cos(x1 ** 2)
x2 = np.linspace(0.01, 10, 100)
y2 = np.sin(x2)
x3 = np.random.rand(100)
y3 = np.linspace(0, 3, 100)
x4 = np.arange(0, 6, 0.5)
y4 = np.power(x4, 3)
fig, ax = plt.subplots(2, 2)
ax1 = plt.subplot(221)
ax1.plot(x1, y1)
ax2 = plt.subplot(222)
ax2.plot(x2, y2)
ax3 = plt.subplot(223)
ax3.scatter(x3, y3)
ax4 = plt.subplot(224, sharex=ax1)
ax4.scatter(x4, y4)
plt.show()

4. 優化坐標軸范圍顯示
plt.autoscale(enable=True, axis="both", tight=True)