如何在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后,对角位置的子图是空的,我们可以手动遍历这些对角子图,添加属性名称标注,具体步骤如下:
- 遍历pairplot对角位置的子图,对应数据集的特征列(排除最后一列的class)
- 在每个对角子图的中心位置添加属性文本,设置合适的字体样式
- 移除子图的刻度,保持视觉整洁
修改后的完整代码:
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
相关产品推荐
相关产品推荐

