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

如何在Seaborn主成分散点图中添加等高线图?

为PCA散点图添加分类等高线的实现方法

要实现散点图叠加分类等高线的效果,核心思路是针对每个类别单独计算核密度估计(KDE),再绘制对应的等高线,最后叠加散点图。以下是具体实现步骤和代码:

步骤说明

  • 先初始化绘图画布,确保所有图层都在同一轴上绘制
  • 遍历分类变量的每个类别,提取对应PCA数据并计算密度分布
  • 为每个类别绘制等高线(可选择填充或纯轮廓样式)
  • 最后叠加原有的着色散点图

完整代码示例

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 假设你的数据框是dataframe,列名分别为'principal component 1'、'principal component 2'、'categorical variable'
plt.figure(figsize=(10, 8))
ax = plt.gca()

# 遍历每个分类类别,绘制对应等高线
categories = dataframe['categorical variable'].unique()
for cat in categories:
    # 提取当前类别的PCA数据
    subset = dataframe[dataframe['categorical variable'] == cat]
    x = subset['principal component 1']
    y = subset['principal component 2']
    
    # 使用seaborn的kdeplot绘制等高线(fill=True可填充,contour=True绘制轮廓)
    sns.kdeplot(
        x=x, y=y, 
        ax=ax,
        levels=5,  # 等高线层数
        fill=False,  # 若需要填充密度区域设为True
        alpha=0.7,  # 透明度
        linestyles='--',  # 线条样式
        label=f'Contour {cat}'
    )

# 叠加原有的着色散点图
sns.scatterplot(
    x=dataframe['principal component 1'], 
    y=dataframe['principal component 2'], 
    hue=dataframe['categorical variable'],
    ax=ax,
    s=50,  # 散点大小
    edgecolor='white'  # 散点边缘色,提升辨识度
)

plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.legend()
plt.show()

关键细节说明

  • 如果需要更精细的密度控制,可以使用scipy.stats.gaussian_kde手动计算密度值,再用plt.contour绘制等高线
  • 调整levels参数可以改变等高线的数量,数值越大轮廓越密集
  • 若要填充密度区域,将fill=True即可,同时可调整alpha控制填充透明度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:47:12