Python新手求助:在Matplotlib水平条形图末端添加数值
解决水平条形图末端显示数值的问题
嘿,我来帮你搞定这个问题!你代码里的核心问题是调用y.text()的时候搞错了对象——这里的y是存储数值的列表,根本没有text()方法,自然没法绘制文本啦。
我给你调整了代码,把数值准确放在每个水平条形的末端,你可以直接用:
import os import numpy as np import matplotlib.pyplot as plt x = ['Buildings', 'Forest', 'Glaciar', 'Moutain', 'Sea', 'Street'] y = [33.41, 90.72, 37.79, 60.95, 51.76, 59.88] x_pos = [i for i, _ in enumerate(x)] # 先绘制条形图 plt.barh(x_pos, y) # 遍历每个数值,添加文本标签 for i, v in enumerate(y): # x坐标:条形长度 + 一点偏移(避免和条形重叠) # y坐标:对应条形的y轴位置 # 文本内容:当前数值,保留两位小数更美观 plt.text(v + 1, i, f"{v:.2f}", va='center', color='blue', fontweight='bold') plt.ylabel("Cenários") plt.xlabel("Percentagem de acerto %") plt.title("Taxa de Reconhecimento") plt.yticks(x_pos, x) # 稍微调整x轴范围,避免最右边的数值被截断 plt.xlim(0, max(y) + 10) plt.show()
关键调整点:
- 先绘制条形图,再添加文本标签,确保文本在条形上方显示
- 用
plt.text()来绘制文本,v + 1给数值加一点偏移,避免和条形边缘贴太紧;i对应条形的y轴位置,保证垂直居中 - 用
f"{v:.2f}"格式化数值,保持和原数据一致的小数位数,显示更整洁 - 新增
plt.xlim(0, max(y) + 10),防止最右侧的数值超出图表范围被截断
这样运行后,每个条形的末端就会清晰显示对应的百分比数值啦!
内容的提问来源于stack exchange,提问作者Nuno Cruz
相关产品推荐
相关产品推荐

