如何在matplotlib.pyplot直方图的每个柱上方显示数据点数量
在Matplotlib直方图柱顶显示精确计数
Matplotlib没有直接的参数一键实现这个需求,但可以通过直方图返回的统计数据手动添加文本标签,步骤很简单:
调用
plt.hist()时,接收它返回的三个核心值:n:每个区间内的样本数量数组bins:区间边界数组patches:每个柱子的图形对象
遍历每个柱子,计算柱子的中心位置,然后在柱顶上方添加对应数量的文本。
完整代码示例
import matplotlib.pyplot as plt import numpy as np # 模拟受访者年龄数据 ages = np.random.randint(18, 70, size=200) # 绘制直方图,接收返回值 n, bins, patches = plt.hist(ages, edgecolor='black') # 遍历每个柱子,添加计数标签 for i in range(len(patches)): # 获取柱子的中心x坐标 x = patches[i].get_x() + patches[i].get_width() / 2 # 获取柱子的高度(即样本数量) y = n[i] # 在柱顶上方添加文本,水平居中 plt.text(x, y + 1, f'{int(y)}', ha='center', fontsize=10) # 设置图表标题和轴标签 plt.title('受访者年龄分布') plt.xlabel('年龄区间') plt.ylabel('人数') plt.show()
关键细节说明
plt.text()的ha='center'让文本在柱子上方水平居中y + 1是给文本加了一点偏移,避免和柱子顶部贴得太近(可根据你的数据调整偏移量)int(y)把计数转成整数,因为样本数量肯定是整数
内容的提问来源于stack exchange,提问作者alekscooper
相关产品推荐
相关产品推荐

