【问题标题】:Matplotlib subplots are all the same size ... how to set them up so subplots scale including the xticks?Matplotlib 子图的大小都相同......如何设置它们以便子图缩放包括 xticks?
【发布时间】:2022-01-21 06:24:18
【问题描述】:

下面是一些示例代码:

from matplotlib import pyplot as plt

plt.subplot(221)
plt.bar(range(3),[34, 37, 16]) # some random data
plt.xticks(range(3),"Jan,Feb,Mar".split(','))

plt.subplot(222)
plt.bar(range(3),[34, 37, 16])
plt.xticks(range(3),"January,February,March".split(','), rotation=90)

plt.subplot(223)
plt.bar(range(3),[34, 37, 16])
plt.xticks(range(3),"Jan,Feb,Mar".split(','))

plt.tight_layout()
plt.show()

这会导致所有地块高度相等:

但我希望它看起来像这样,整个“子图”大小相同:

【问题讨论】:

标签: python matplotlib


【解决方案1】:

使用 subfigures (https://matplotlib.org/stable/gallery/subplots_axes_and_figures/subfigures.html),您可以创建 4 个虚拟位置来绘制您的绘图,但它们不会尝试使用紧密或 constrained_layout 相互对齐(注意,tight_layout 不适用于子图形)。

from matplotlib import pyplot as plt

fig = plt.figure(constrained_layout=True)

sfigs = fig.subfigures(2, 2)

ax = sfigs[0, 0].subplots()
ax.bar(range(3),[34, 37, 16]) # some random data
ax.set_xticks(range(3),"Jan,Feb,Mar".split(','))

ax = sfigs[0, 1].subplots()
ax.bar(range(3),[34, 37, 16])
ax.set_xticks(range(3),"January,February,March".split(','), rotation=90)

ax = sfigs[1, 0].subplots()
ax.bar(range(3),[34, 37, 16])
ax.set_xticks(range(3),"Jan,Feb,Mar".split(','))

plt.show()

【讨论】:

  • 这太好了,谢谢。
猜你喜欢
  • 2017-03-01
  • 2017-05-22
  • 2022-10-13
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2019-04-30
  • 2021-08-05
相关资源
最近更新 更多