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

Python绘图:如何为不同聚类的两类数据设置不同颜色

解决Seaborn散点图无法按类别显示不同颜色的问题

问题分析

  1. 分类逻辑错误:你当前的颜色判断条件(df["x1"] <=7) & (df["x1"]>0)覆盖了所有样本(从你提供的数据集看,所有x1都在0-7区间内),导致所有点都被设置为紫色#9b59b8,这是颜色单一的核心原因。
  2. Seaborn API使用不当:sns.regplot更适合带回归线的绘图场景,通过scatter_kws传递颜色的方式不够直观,改用scatterplot结合hue参数更适配按类别着色的需求。

修正方案

方案1:根据数据集的y列(聚类标签)着色

如果y列是聚类的类别标签,直接用它区分颜色是最准确的:

# import libraries
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

# function for plotting data
def plot_data(data):
    # 定义类别-颜色映射,根据y的实际取值调整键值
    color_map = {1.0: "#9b59b8", 0.0: "#3498db"}

    # 使用scatterplot按y列分类着色
    sns.scatterplot(data=data, x="x1", y="x2", hue="y", palette=color_map, s=50)

    plt.title("Datasets for Neural network")
    plt.xlabel("X_1")
    plt.ylabel("X_2")
    plt.legend().remove()  # 不需要图例可删除此行
    plt.show()

data = pd.read_csv('./assets/data/data0/data.csv')
plot_data(data)

方案2:根据x1的正确阈值分类

如果确实需要按x1的分界值区分(比如期望图中左侧为紫色、右侧为蓝色),请调整符合数据分布的阈值,例如假设分界值为8:

# import libraries
from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd

# function for plotting data
def plot_data(data):
    df = data.copy()
    # 调整分类阈值,生成类别列
    df['category'] = np.where(df["x1"] <= 8, "left", "right")
    # 定义类别-颜色映射
    color_map = {"left": "#9b59b8", "right": "#3498db"}

    sns.scatterplot(data=df, x="x1", y="x2", hue="category", palette=color_map, s=50)

    plt.title("Datasets for Neural network")
    plt.xlabel("X_1")
    plt.ylabel("X_2")
    plt.legend().remove()
    plt.show()

data = pd.read_csv('./assets/data/data0/data.csv')
plot_data(data)

关键改动说明

  • 替换regplot为scatterplot:更专注于散点图绘制,支持直接通过hue参数按列分类着色。
  • 修正分类逻辑:要么使用数据集自带的聚类标签y,要么设置符合数据分布的x1阈值。
  • 使用palette参数传递自定义颜色:比手动设置facecolors更符合Seaborn的设计逻辑,避免参数冲突。

内容的提问来源于stack exchange,提问作者F.C. Akhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:45:42