如何在Matplotlib直方图的柱顶添加百分比数值?
在Matplotlib直方图柱顶添加百分比数值
没问题,我来帮你搞定这个需求!你已经用weights参数算出了各区间的比例,也给y轴设置了百分比格式,现在只需要在每个柱子顶部补上对应的百分比文本就行。
修改后的完整代码
import matplotlib.pyplot as plt from matplotlib.ticker import PercentFormatter import numpy as np x = [2.5, 10.4, 0.5, 1.2, 4.6, 3.6, 0.8, 2.5, 2.9, 1.6, 9.4, 4.9, 2.6, 4.2, 3.9] # 绘制直方图,同时获取柱子高度、区间边界和图形对象 n, bins, patches = plt.hist(x, bins = [0,1,2,3,10], weights=np.ones(len(x)) / len(x)) # 设置y轴为百分比显示格式 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) # 遍历每个柱子,添加百分比文本 for i in range(len(n)): # 计算柱子的中心x坐标,让文本居中显示 x_center = (bins[i] + bins[i+1]) / 2 # 柱子的高度(对应比例值) y_height = n[i] # 把比例值格式化为百分比,这里保留1位小数 percent_text = "{:.1%}".format(y_height) # 在柱顶添加文本,稍微上移一点避免和柱子贴太近 plt.text(x_center, y_height + 0.01, percent_text, ha='center', fontsize=10) plt.show()
关键细节说明
plt.hist()会返回三个值:n是每个柱子的高度(也就是你设置权重后的比例值),bins是区间的边界值,patches是每个柱子的图形实例(这次我们用不上)。- 遍历
n的每个元素,通过区间边界计算柱子的中心位置,确保文本能居中对齐在柱顶。 - 用
"{:.1%}"把小数比例转成百分比格式,你可以把1改成2来显示两位小数,按需调整即可。 plt.text()的ha='center'是让文本水平居中,y_height + 0.01是给文本加个小偏移,避免和柱子顶部重叠。
这样修改后,你的直方图每个柱子顶部就会清晰显示对应的百分比数值啦!
内容的提问来源于stack exchange,提问作者Divs
相关产品推荐
相关产品推荐

