You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:02:57