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

如何设置Seaborn散点图的hue参数按特征而非单一特征值分类着色

实现方案

要实现按不同特征分类着色的需求,最常用的变通方案是先将宽格式的DataFrame转换为长格式,构造出单独的特征分类列传入hue参数即可,完全适配Seaborn scatterplot的原生参数规则。

方法1:转换为长格式(推荐)

该方案符合Seaborn的参数设计逻辑,代码简洁易维护,后续修改样式也更方便。

步骤1:数据格式转换

用pandas的melt方法将多列特征合并为分类列,示例代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 构造示例数据
df = pd.DataFrame({
    "Happiness": [100, 60, 34, 23, 43],
    "Kindness": [70, 50, 32, 65, 54],
    "Sadness": [0, 1, 10, 54, 87]
}, index=[1, 2, 3, 4, 5])

# 宽表转长表,保留原行号作为样本编号(可根据你的实际需求替换id_vars为你要作为x轴的字段)
df_long = df.reset_index().melt(
    id_vars="index",
    var_name="feature_type",
    value_name="feature_value"
)

步骤2:绘制散点图

自定义颜色映射,将特征分类列传入hue参数:

# 自定义和需求匹配的调色板
custom_palette = {
    "Happiness": "red",
    "Kindness": "blue",
    "Sadness": "green"
}

# 绘图
sns.scatterplot(
    data=df_long,
    x="index",
    y="feature_value",
    hue="feature_type",
    palette=custom_palette,
    s=100
)
plt.xlabel("样本编号")
plt.ylabel("特征取值")
plt.legend(title="特征类型")
plt.show()

方法2:多次调用散点图接口(无需转换数据)

如果不想改动原始数据结构,也可以分别绘制三个特征的散点,手动指定颜色:

sns.scatterplot(x=df.index, y=df["Happiness"], color="red", label="Happiness", s=100)
sns.scatterplot(x=df.index, y=df["Kindness"], color="blue", label="Kindness", s=100)
sns.scatterplot(x=df.index, y=df["Sadness"], color="green", label="Sadness", s=100)

plt.xlabel("样本编号")
plt.ylabel("特征取值")
plt.legend(title="特征类型")
plt.show()

两种方案都可以实现你要求的着色效果,可根据自己的使用场景选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:09:03