在Python中调整matplotlib中各个子图的高度

12 python numpy matplotlib scipy

如果我有一系列包含一列和多行的子图,即:

plt.subplot(4, 1, 1) # first subplot
plt.subplot(4, 1, 2) # second subplot
# ...
Run Code Online (Sandbox Code Playgroud)

如何调整前N个子图的高度?例如,如果我有4个子图,每个子图都在自己的行上,我希望它们全部具有相同的宽度,但是前3个子图更短,即它们的y轴更小并且占用的图比行中最后一个绘图的y轴.我怎样才能做到这一点?

谢谢.

ben*_*oss 21

即使这个问题很老,我也想回答一个非常相似的问题.@ Joe对AxesGrid的引用,是我的问题的答案,并且使用起来简单,所以我想说明这个功能的完整性.

AxesGrid功能提供了创建不同大小的图的能力,并通过以下subplot2grid功能非常具体地放置它们:

import matplotlib.pyplot as plt

ax1 = plt.subplot2grid((m, n), (row_1, col_1), colspan = width)
ax2 = plt.subplot2grid((m, n), (row_2, col_2), rowspan = height)

ax1.plot(...)
ax2.plot(...)
Run Code Online (Sandbox Code Playgroud)

注意,对于最大值row_n,col_nm-1n-1分别作为零索引符号被使用.

特别针对这个问题,如果总共有5个子图,其中最后一个子图的高度是其他子图的两倍,我们可以使用m=6.

ax1 = plt.subplot2grid((6, 1), (0, 0))
ax2 = plt.subplot2grid((6, 1), (1, 0))
ax3 = plt.subplot2grid((6, 1), (2, 0))
ax4 = plt.subplot2grid((6, 1), (3, 0))
ax5 = plt.subplot2grid((6, 1), (4, 0), rowspan=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

最后一个图形,高度的两倍

  • 感谢发布 - 我需要这样做,这正是我正在寻找的. (2认同)

Joe*_*ton 4

有多种方法可以做到这一点。最基本(也是最不灵活)的方法是调用如下内容:

import matplotlib.pyplot as plt
plt.subplot(6,1,1)
plt.subplot(6,1,2)
plt.subplot(6,1,3)
plt.subplot(2,1,2)
Run Code Online (Sandbox Code Playgroud)

这会给你这样的东西: 不平等的次要情节

但是,这不太灵活。如果您使用的是 matplotlib >= 1.0.0,请考虑使用GridSpec。这非常好,并且是布置次要情节的更灵活的方式。

  • @user2422503 - 请注意日期和对下面答案所建议内容的引用。当时,subplot2grid/GridSpec/etc 非常新,大多数人使用的 matplotlib 版本不包含它。因此,我展示了更广泛可用的解决方案,并指出了更新、更干净的解决方案。 (2认同)