自定义图形布局
可以创建axes的网格状组合的方法:
1)subplots()
用于创建图形和axes的主要函数。它类似于 matplotlib.pyplot.subplot(),但会同时创建并放置图形上的所有axes。
2)GridSpec
指定将放置子图的网格几何形状。要设置网格的行数和列数,也可调整子图的布局参数(如left、right等)。
3)SubplotSpec
在给定的 GridSpec 中指定子图的位置。
4)subplot2grid()
实例1:
gridspec 的强大之处在于能够创建跨行和列的子图。注意用于选择每个子图将占据的gridspec部分的 Numpy 切片语法。
我们也可以使用 Figure.add_gridspec方法创建不同宽度的子图:
python
import matplotlib.pyplot as plt
fig3 = plt.figure(constrained_layout=True)
gs = fig3.add_gridspec(3, 3)
f3_ax1 = fig3.add_subplot(gs[0, :])
f3_ax1.set_title('gs[0, :]')
f3_ax2 = fig3.add_subplot(gs[1, :-1])
f3_ax2.set_title('gs[1, :-1]')
f3_ax3 = fig3.add_subplot(gs[1:, -1])
f3_ax3.set_title('gs[1:, -1]')
f3_ax4 = fig3.add_subplot(gs[-1, 0])
f3_ax4.set_title('gs[-1, 0]')
f3_ax5 = fig3.add_subplot(gs[-1, -2])
f3_ax5.set_title('gs[-1, -2]')
plt.show()
效果:
这里add_gridspec(3, 3)
表示划分整个布局为3*3
,
gs[0,:]
表示所占据的子图网格为第一行,
gs[-1,0]
即最后一行,第一列
gs[1:,-1]
表示第二行到最后一行,最后一列
实例2:
python
fig = plt.figure(figsize=(12, 12), constrained_layout=True)
gs = fig.add_gridspec(8, 8)
imgs = generated_images[-1].reshape(8, 8, 28, 28)
for n_row in range(8):
for n_col in range(8):
f_ax = fig.add_subplot(gs[n_row, n_col])
效果:
这里add_gridspec(8, 8)
表示划分整个布局为8*8
,
两个for循环依次遍历行和列,则子图将整个布局填满。