如何控制每个子图中我的 y 标签之间的间距(matplotlib)[重复]
Posted
技术标签:
【中文标题】如何控制每个子图中我的 y 标签之间的间距(matplotlib)[重复]【英文标题】:How to control the spacing between my y-labels in each subplots (matplotlib) [duplicate] 【发布时间】: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'labelea' for ea in xa]
yb = [f'label_blablablaea' for ea in xb]
yc = [f'label_abcxea' 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'labelea' for ea in xa]
yb = [f'label_blablablaea' for ea in xb]
yc = [f'label_abcxea' 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 标签之间的间距像第一张图像一样一致?谢谢
【问题讨论】:
具体来说,这个answer 【参考方案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'labelea' for ea in xa]
yb = [f'label_blablablaea' for ea in xb]
yc = [f'label_abcxea' 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)
输出:
注意。由于高度包括轴标签和最终标题,结果不会完全均匀(就像在您的第一个解决方案中一样)。但是每张图的行数越高,差异越小,越会向理想值收敛。
【讨论】:
谢谢!它完美无瑕!以上是关于如何控制每个子图中我的 y 标签之间的间距(matplotlib)[重复]的主要内容,如果未能解决你的问题,请参考以下文章