当存在自定义刻度时,将条形值添加到子栏图

时间:2018-04-30 10:56:46

标签: python matplotlib multiple-axes

我需要在barh()或plt.bar()顶部添加条形值。 但是,我有自定义xTicks。我该怎么做?

所以我有4个子图,他们的x或y刻度是自定义的,代码迭代良好但文本位置因xticks而不正确。

import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
[subax.yaxis.set(ticks=range(1,4),ticklabels=['a','b','c']) for ax in axes for subax in ax]
# Data
data=list([([8, 9, 8]), ([23, 26, 2]), ([33,37,33]), ([40, 45, 40])])
barplot=[subax.barh([1,2,3],list(data.pop())) for ax in axes for subax in ax]

for ax in axes:
    for subax in ax:
        count=0
        [[subax.text(rect.get_width()+2,3, str(rect.get_width()))] for rect in barplot[count]]
    count+=1
plt.show()

感谢。

编辑:当我尝试将其保存为图片时,文字放置会变得最糟糕

1 个答案:

答案 0 :(得分:0)

文本的y坐标需要与其必须标记的条的y坐标一致。因此,您不能将3放在所有文本中,而是可以例如使用循环变量获取该坐标。

我稍微清理了你的代码,因为它很难阅读。

import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

data=list([([8, 9, 8]), ([23, 26, 2]), ([33,37,33]), ([40, 45, 40])])
barplot=[ax.barh(['a','b','c'],list(data.pop())) for ax in axes.flat]

for i, ax in enumerate(axes.flat):
    for j, rect in enumerate(barplot[i]):
        ax.text(rect.get_width(), j, str(rect.get_width()))
plt.show()

enter image description here