如何在Seaborn histplot绘制的直方图上标注每个分箱的数值?
实现分箱数值标注的解决方案
当然可以给每个分箱标注数值,只需要在绘制直方图后,遍历每个分箱的矩形元素,获取其位置和计数,再用plt.text()添加标注即可。修改后的完整代码如下:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np # Fixing random state for reproducibility np.random.seed(19680801) x, y = np.random.rand(2, 100) * 4 ax = sns.histplot(x=x, y=y, bins=4, binrange=[[0, 4], [0, 4]]) # 遍历每个分箱的矩形元素,添加数值标注 for patch in ax.patches: # 获取分箱的计数(高度) count = patch.get_height() # 跳过计数为0的分箱(避免显示0) if count == 0: continue # 获取分箱的中心位置坐标 x_center = patch.get_x() + patch.get_width() / 2 y_center = patch.get_y() + patch.get_height() / 2 # 添加文本标注,设置对齐方式和字体大小 ax.text(x_center, y_center, int(count), ha='center', va='center', fontsize=10) plt.show()
关键部分说明:
ax = sns.histplot(...):保存直方图绘制的Axes对象,方便后续操作ax.patches:包含直方图中所有分箱的矩形元素,每个元素对应一个分箱patch.get_height():获取该分箱的计数(即条形高度)- 通过
patch.get_x()、patch.get_width()、patch.get_y()计算分箱的中心位置,保证标注居中 ax.text():在计算好的位置添加计数文本,设置对齐参数确保显示效果
运行代码后,每个有数据的分箱中心位置都会显示对应的计数数值,达到你想要的效果。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

