使用多条形图绘制多标签(值)

时间:2020-09-25 22:19:37

标签: python-3.x matplotlib

我有此问题,希望您能提供帮助。 我有这些数据:

to_stack = pd.DataFrame([['CHILDREN', 0.42806248287201976, 0.0],
       ['AMT_TOTAL', 165006, 179357],
       ['SAL', 582065, 703917.0],
       ['ANNUITY', 26851, 28416]], columns=('Variable','Id','Mean'))

当我运行以下代码时

to_stack.plot.barh(x='Variable', figsize=(12,8), width = .9)

## First Loop for first Variable "ID"
for index,value in enumerate(to_stack['Id']):
    plt.text(value, index, str(value),  va='top', )

## Second Loop for Second Variable
for i,val in enumerate(to_stack['Mean']):
    plt.text(val, i, str(val),  va='bottom' )

我得到这个结果enter image description here

每个栏中的值都没有很好地集中

我在Matplotlib.plt.text(ha(中,左,右),va(上,下,基线)中尝试了几个选项,但均未获得良好的结果,有时甚至更糟,值相互之间。 / p>

我们如何使值与条形对齐?

任何想法都非常受欢迎

1 个答案:

答案 0 :(得分:1)

最好从条中提取信息并进行注释。这样,您可以更好地控制文本相对于条形的显示方式:

fig, ax = plt.subplots(figsize=(12,8),)
to_stack.plot.barh(x='Variable',  width = .9, ax=ax)

for patch in ax.patches:
    w, h = patch.get_width(), patch.get_height()
    y = patch.get_y()
    
    ax.text(w + -0.1,h/2+y, f'{w:.3f}', va='center')

输出:

enter image description here