You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Seaborn pairplot的对角方格中添加属性标注?

问题

我用Iris数据集制作了pairplot可视化图,但导师要求在对角方格中标注对应属性名称。查了Seaborn pairplot官方文档没找到相关设置选项,请问怎么实现这个标注效果?

  • 当前效果图:对角方格为空,无属性标注
  • 导师要求的效果:对角方格中心显示对应属性名称(如sepal_length、sepal_width等)

我的代码如下:

from sklearn import datasets
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

iris = datasets.load_iris()

sns.set_theme(style="ticks")

df = pd.DataFrame(iris.data)
df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
df['class'] = iris.target

sns.set_palette("pastel")
g = sns.pairplot(df, hue='class', diag_kind=None, palette=['#FF6961','#77DD77','#1e81b0']) 

g._legend.remove()

plt.legend(title='Categorys', loc='center right', labels=['Virginica','Versicolour','Setosa'], bbox_to_anchor=(1.9, 2))

plt.show(g)

解决方案

由于pairplot设置diag_kind=None后,对角位置的子图是空的,我们可以手动遍历这些对角子图,添加属性名称标注,具体步骤如下:

  1. 遍历pairplot对角位置的子图,对应数据集的特征列(排除最后一列的class)
  2. 在每个对角子图的中心位置添加属性文本,设置合适的字体样式
  3. 移除子图的刻度,保持视觉整洁

修改后的完整代码:

from sklearn import datasets
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

iris = datasets.load_iris()

sns.set_theme(style="ticks")

df = pd.DataFrame(iris.data)
df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
df['class'] = iris.target

sns.set_palette("pastel")
g = sns.pairplot(df, hue='class', diag_kind=None, palette=['#FF6961','#77DD77','#1e81b0']) 

# 添加对角属性标注
feature_cols = df.columns[:-1]  # 排除class列
for i, col in enumerate(feature_cols):
    ax = g.axes[i, i]
    # 在子图中心添加属性名称
    ax.text(0.5, 0.5, col, 
            ha='center', va='center', 
            fontsize=12, fontweight='bold')
    # 移除刻度,避免干扰
    ax.set_xticks([])
    ax.set_yticks([])

g._legend.remove()

plt.legend(title='Categorys', loc='center right', labels=['Virginica','Versicolour','Setosa'], bbox_to_anchor=(1.9, 2))

plt.tight_layout()  # 调整布局,防止标注被截断
plt.show(g)

关键代码说明

  • g.axes[i, i]:获取第i行第i列的对角子图
  • ax.text():在子图的中心(坐标0.5,0.5,基于子图的相对坐标)添加属性文本,设置水平和垂直居中,以及字体大小和粗细
  • ax.set_xticks([])和ax.set_yticks([]):移除对角子图的刻度,保持界面简洁
  • plt.tight_layout():自动调整子图间距,避免标注或图例被截断

内容的提问来源于stack exchange,提问作者Watson221

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:55:20