如何为seaborn PairGrid对角线添加汇总统计标注并解决相关报错
报错原因
ax.annotate() 方法的第一个参数要求接收字符串类型的文本内容,你直接传入pd.DataFrame(label)对象,matplotlib内部执行s != self._text的布尔判断时,触发了pandas对象的真值判定规则,抛出当前错误。
修正后的完整代码
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns iris = sns.load_dataset('iris') def summary(x, **kwargs): x = pd.Series(x) # 计算统计值后转成格式化字符串 stats = x.describe()[['mean', 'std', 'min', '50%', 'max']].round(1) # 拼接成多行对齐文本 text = '\n'.join([f'{k}: {v}' for k, v in stats.items()]) ax = plt.gca() ax.set_axis_off() # 传入字符串格式的统计文本 ax.annotate(text, xy=(0.1, 0.2), size=12, xycoords=ax.transAxes) # 旧版seaborn的size参数已更名为height grd = sns.PairGrid(data=iris, height=2.5) # 按需绘制上下三角,移除冗余重复绘图逻辑,避免图层覆盖 grd.map_upper(plt.scatter, color='k', s=15, alpha=0.6) grd.map_lower(sns.kdeplot, cmap='PRGn_r', fill=True) grd.map_diag(summary) plt.tight_layout() plt.show()
额外调整说明
- 补充了缺失的
pandas导入语句,避免未定义报错 - 调整字体大小和图表尺寸,避免统计文本溢出对角线单元格
- 移除上下三角重复绘图的冗余代码,你可以根据需求自行调整上下三角的绘图类型
内容的提问来源于stack exchange,提问作者Curious
相关产品推荐
相关产品推荐

