【问题标题】:How to control the spacing between my y-labels in each subplots (matplotlib) [duplicate]如何控制每个子图中我的 y 标签之间的间距(matplotlib)[重复]
【发布时间】:2021-11-07 09:40:20
【问题描述】:

我用这些代码创建了 3 个水平条形图。正如您所见,所有图表上 y 标签之间的间距都非常均匀,因为每个图形的高度都是独立定制的。

import matplotlib.pyplot as plt
import numpy as np

xa = np.arange(1, 15)
xb = np.arange(1, 30)
xc = np.arange(1, 5)
ya = [f'label{ea}' for ea in xa]
yb = [f'label_blablabla{ea}' for ea in xb]
yc = [f'label_abcx{ea}' for ea in xc]

plt.figure(figsize=(5, len(xa)*.3))
plt.barh(ya, xa)

plt.figure(figsize=(5, len(xb)*.3))
plt.barh(yb, xb)

plt.figure(figsize=(5, len(xc)*.3))
plt.barh(yc, xc)

plt.show()

但是这些数字并没有水平排列,因为 y 标签的文本有不同的长度。所以我使用子图来对齐数字如下:

import matplotlib.pyplot as plt
import numpy as np

xa = np.arange(1, 15)
xb = np.arange(1, 30)
xc = np.arange(1, 5)
ya = [f'label{ea}' for ea in xa]
yb = [f'label_blablabla{ea}' for ea in xb]
yc = [f'label_abcx{ea}' for ea in xc]

fig, axs = plt.subplots(3, 1, figsize=(5, 10))
axs[0].barh(ya, xa)
axs[1].barh(yb, xb)
axs[2].barh(yc, xc)
plt.show()

但后来这种技术弄乱了每个子图中 y 标签之间的间距。有没有人有更好的想法来使所有子图上的 y 标签之间的间距像第一张图像一样一致?谢谢

【问题讨论】:

标签: python matplotlib


【解决方案1】:

添加gridspec_kw={'height_ratios': [len(xa), len(xb), len(xc)]} 以初始化子图。

import matplotlib.pyplot as plt
import numpy as np

xa = np.arange(1, 15)
xb = np.arange(1, 30)
xc = np.arange(1, 5)
ya = [f'label{ea}' for ea in xa]
yb = [f'label_blablabla{ea}' for ea in xb]
yc = [f'label_abcx{ea}' for ea in xc]

fig, axs = plt.subplots(3, 1, figsize=(5, 10), gridspec_kw={'height_ratios': [len(xa), len(xb), len(xc)]})
axs[0].barh(ya, xa)
axs[1].barh(yb, xb)
axs[2].barh(yc, xc)

输出:

注意。由于高度包括轴标签和最终标题,结果不会完全均匀(就像在您的第一个解决方案中一样)。但是每张图的行数越高,差异越小,越会向理想值收敛。

【讨论】:

  • 谢谢!它完美无瑕!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多