如何在Seaborn二维histplot的每个分箱中显示计数?
给Seaborn二维直方图添加分箱计数标签
要给sns.histplot(data, x='var1', y='var2')生成的二维直方图每个分箱添加计数标签,可通过以下步骤实现:
- 绘制二维直方图并获取Axes对象
- 从直方图的核心绘图元素中提取分箱的计数值与中心坐标
- 遍历分箱,用
annotate添加计数文本
完整示例代码
import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据(可替换为你的数据集) tips = sns.load_dataset("tips") # 绘制二维直方图 ax = sns.histplot(data=tips, x="total_bill", y="tip") # 获取直方图的QuadMesh核心元素 quadmesh = ax.collections[0] # 提取每个分箱的计数值 counts = quadmesh.get_array() # 提取每个分箱的中心坐标 box_centers = quadmesh.get_offsets() # 遍历分箱添加计数标签 for center, count in zip(box_centers, counts): # 仅为有数据的分箱添加标签,避免空分箱干扰 if count > 0: ax.annotate( int(count), xy=center, ha="center", va="center", color="white" # 白色文本匹配热力图样式 ) plt.show()
关键说明
ax.collections[0]:二维直方图的所有分箱视觉元素存储在Axes的collections列表中,第一个元素即为QuadMesh对象get_array():返回每个分箱的频数计数值数组get_offsets():返回每个分箱的中心坐标(x,y)- 可按需调整文本样式:比如修改
fontsize调整字体大小,或修改color适配不同直方图配色
内容的提问来源于stack exchange,提问作者Peter Thomassen
相关产品推荐
相关产品推荐

