如何在pandas/seaborn绘制的直方图中添加统计信息文本框?
给Seaborn直方图添加统计信息文本框的半自动实现
我刚好搞定过类似的需求,不用手动计算统计值,代码里自动提取并生成带文本框的标注,完全适配你的场景,分享给你:
完整实现代码
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd # 假设你的combo DataFrame已经准备好 # 先计算需要的统计指标 resubmits_data = combo['resubmits'] mean_val = resubmits_data.mean().round(2) stdev_val = resubmits_data.std().round(2) n_val = resubmits_data.count() # 构建标注文本,用换行整理格式 annot_text = f"""Mean: {mean_val} Std Dev: {stdev_val} Sample Size: {n_val}""" # 绘制直方图(保留你原有的代码) sns.distplot(combo['resubmits'], kde=False, bins=8) # 添加带文本框的标注,位置可以根据你的图调整 plt.text( x=plt.gca().get_xlim()[1] * 0.75, # x位置设为x轴上限的75%,避免遮挡 y=plt.gca().get_ylim()[1] * 0.9, # y位置设为y轴上限的90% s=annot_text, bbox=dict(facecolor='white', edgecolor='gray', alpha=0.8) # 设置文本框样式:白色背景、灰色边框、半透明 ) # 保存图片 plt.savefig("g1.png") plt.show()
关键细节说明
- 半自动提取统计值:直接从DataSeries里计算均值、标准差和样本量,不用手动输入,数据更新时标注会自动同步
- 文本框样式自定义:
bbox参数可以调整背景色、边框颜色、透明度,适配你的图表风格 - 位置自适应:用
plt.gca().get_xlim()和get_ylim()获取当前轴的范围,计算标注位置,不用硬编码数值,换不同数据也能正常显示 - 如果你的Seaborn是新版本(≥0.11.0),官方推荐用
sns.histplot()替代distplot(),代码只需要把distplot换成histplot,其他逻辑完全一致
效果调整小技巧
如果觉得标注位置不合适,可以修改x和y的系数:
- 想把标注移到更靠左的位置,就把x的系数调小(比如0.6)
- 想移到更靠下的位置,就把y的系数调小(比如0.7)
内容的提问来源于stack exchange,提问作者pitosalas
相关产品推荐
相关产品推荐

