matplotlib 布局
子图
plt.subplots均匀子图
fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
-
返回元素分别是画布和子图构成的列表,
-
第一个数字为行,第二个为列
-
figsize
参数可以指定整个画布的大小 -
sharex
和sharey
分别表示是否共享横轴和纵轴刻度 -
tight_layout
函数可以调整子图的相对大小使字符不会重叠
fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('样例1', size=20)
for i in range(2):
for j in range(5):
axs[i][j].scatter(np.random.randn(10), np.random.randn(10))
axs[i][j].set_title('第%d行,第%d列'%(i+1,j+1))
axs[i][j].set_xlim(-5,5)
axs[i][j].set_ylim(-5,5)
if i==1: axs[i][j].set_xlabel('横坐标')
if j==0: axs[i][j].set_ylabel('纵坐标')
fig.tight_layout()
⭐极坐标系plt.subplot
没有s
plt.subplot(projection="polar")
N = 150
r = 2 * np.random.rand(N)
theta = 2 * np.pi * np.random.rand(N)
area = 200 * r**2
colors = theta
plt.subplot(projection='polar') # 要用subplot
plt.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)
# cmap: 配色方案
# c:color
# s: scale
# alpha:透明度
fig.add_gridspec非均匀子图
所谓非均匀包含两层含义,第一是指图的比例大小不同但没有跨行或跨列,第二是指图为跨列或跨行状态
spec = fig.add_gridspec(nrows, ncols, width_ratios, height_ratios)
width_ratios
可以指定相对宽度比例height_ratios
相对高度比例参数
搭配ax = fig.add_subplot(spec[i,j])
图的比例大小不同
fig = plt.figure(figsize=(10, 4))
spec = fig.add_gridspec(nrows=2, ncols=5, width_ratios=[1,2,3,4,5]