【发布时间】: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 标签之间的间距像第一张图像一样一致?谢谢
【问题讨论】:
-
具体来说,这个answer
标签: python matplotlib