Python 3.x 将条形图文本格式设置为小数点后2位
我的工作代码如下:Python 3.x 将条形图文本格式设置为小数点后2位,python-3.x,pandas,matplotlib,Python 3.x,Pandas,Matplotlib,我的工作代码如下: active_parking = pd.pivot_table(parking[parking['Bldg Status'] == 'ACTIVE'], index='Owned/Leased', values='Total Parking Spaces', aggfunc='mean'
active_parking = pd.pivot_table(parking[parking['Bldg Status'] == 'ACTIVE'],
index='Owned/Leased',
values='Total Parking Spaces',
aggfunc='mean'
)
active_parking['% of Total'] = ((active_parking['Total Parking Spaces'] / active_parking['Total Parking Spaces'].sum()) * 100)
print(active_parking, '\n')
active_parking.plot(kind='bar')
for i, number in enumerate(active_parking['Total Parking Spaces']):
plt.text(x=i, y=number, s=number, horizontalalignment='center', weight='bold')
for i, number in enumerate(active_parking['% of Total']):
plt.text(x=i, y=number, s=number, horizontalalignment='left', weight='bold')
plt.xticks(rotation=0)
plt.show()
它产生这个输出:
Total Parking Spaces % of Total
Owned/Leased
LEASED 44.707349 37.546059
OWNED 74.365997 62.453941
但我的情节有两个问题我似乎无法解决:
1) I want the displayed value on top of each bar limited to two decimal places.
2) After solving the above issue, how do I center the value over each bar?
即使我使用以下命令裁剪文本显示:pd.options.display.float_format='{.2f}'。format,
绘图仍显示14位小数。使用:
active_parking.plot(kind='bar')
for i, number in enumerate(active_parking['Total Parking Spaces']):
plt.text(x=i-.23, y=number + 0.9, s=round(number, 2), weight='bold')
for i, number in enumerate(active_parking['% of Total']):
plt.text(x=i+.02, y=number + 0.9, s=round(number, 2), weight='bold')
plt.xticks(rotation=0)
plt.ylim(top=active_parking.values.max() + 8)
plt.show()
这解决了精度问题,但我仍然无法将显示的值集中在每个条上。我得到的最接近的结果是使用“右”表示总停车位,使用“左”表示总停车位的%。而这些只起作用,因为我有两个专栏。如果我有两个以上,那就不行了。有没有办法指定每一个值都在每一列的中心?@MarkS-你能检查一下吗?
@jezrael
可能我缺乏经验,但我尝试了你发送的链接,但结果更糟。文本现在沿x轴(不像以前那样位于每个条的顶部)移动,并相对于每个条向右移动。我试图调整一些设置,但输出从未改变。@MarkS-Answer被编辑,我手动向x
和y
值添加一些常量,还设置ylim
将8
添加到所有数据的最大值。@jezrael
现在我明白了。需要操纵“x”和“y”值。加上ylim参数。非常感谢。