【问题标题】:adjusting heights of individual subplots in matplotlib in Python在 Python 中调整 matplotlib 中各个子图的高度
【发布时间】:2011-03-20 19:08:27
【问题描述】:

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

plt.subplot(4, 1, 1) # first subplot
plt.subplot(4, 1, 2) # second subplot
# ...

如何调整前 N 个子图的高度?例如,如果我有 4 个子图,每个子图在自己的行上,我希望它们都具有相同的宽度,但前 3 个子图更短,即它们的 y 轴更小并且占用的图少于行中最后一个图的 y 轴。我该怎么做?

谢谢。

【问题讨论】:

标签: python numpy matplotlib scipy


【解决方案1】:

尽管这个问题很老,但我还是想回答一个非常相似的问题。 @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(...)

请注意,row_ncol_n 的最大值分别为 m-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()

【讨论】:

  • 感谢您的发帖——我需要这样做,而这正是我想要的。
  • 这真的很简单,而且比公认的答案好得多
【解决方案2】:

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

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)

这会给你这样的东西:

但是,这不是很灵活。如果您使用 matplotlib >= 1.0.0,请考虑使用 GridSpec。这很不错,而且是一种更灵活的子图布局方式。

【讨论】:

  • 我相信这个答案是次优的,下面的答案应该是公认的
  • @user2422503 - 请注意日期和对以下答案所暗示的确切内容的引用。那时,subplot2grid/GridSpec/etc 非常新,大多数人都在使用不包含它的 matplotlib 版本。因此,我展示了更广泛可用的解决方案,并指出了更新、更清洁的解决方案。
  • @Joe Kington,对不起
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多