8-4 复杂网格

subplot/subplots命令主要用于指定等行/列数量的网格,对于不等行列的网格则操作较为繁琐,此时可以使用其他同类命令。

subplot2grid方法

当各行/列仍然是等量拆分,只是各行/列宽度不同时,用subplot2grid方法来设置网格很方便。

matplotlib.pyplot.subplot2grid(shape, loc, rowspan=1, colspan=1)

shape设定整体网格行列数
loc指定网格起点,而rowspan/colspan则用来指定网格跨度

plt.figure()
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan = 3)  
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan = 2)

ax5 = plt.subplot2grid((3, 3), (2, 1))
plt.figure()
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan = 3)  
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan = 2)
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan = 2)
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax5 = plt.subplot2grid((3, 3), (2, 1))

GridSpec方法

可以说是指定各种不等距复杂网格的专用方法,操作最为便捷。

matplotlib.gridspec.GridSpec(

nrows/ncols : 网格的行/列数
figure : 指定网格将被放置的Figure对象
left/bottom/right/top : 网格四边所对应的图形长宽比例
wspace/hspace : 周边留空大小
width_ratios/height_ratios : 各行/列的大小比例
)

Spec(2, 2, width_ratios=[1, 2], height_ratios=[4, 1])
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])

plt.show()
# 一个复杂的不等距网格案例
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

# 自定义函数,隐藏数轴刻度
def make_ticklabels_invisible(fig):
    for i, ax in enumerate(fig.axes):
        ax.text(0.5, 0.5, "ax%d" % (i+1), va="center", ha="center")
        ax.tick_params(labelbottom=False, labelleft=False)

fig = plt.figure()

gs = GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
# identical to ax1 = plt.subplot(gs.new_subplotspec((0, 0), colspan=3))
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, -2])

fig.suptitle("$GridSpec$")
make_ticklabels_invisible(fig)

plt.show()
上一篇:matplotlib折线图


下一篇:python matplotlib 的subplot方法