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

基于DataFrame类别为散点图数据点颜色编码的报错求助

解决散点图按类别颜色编码的报错问题

嗨,我来帮你搞定这个问题!你遇到的报错原因很明确:pd.unique(df['Category'])得到的是不同类别的列表(比如你这里有37个独特类别),但plt.scatter()的c参数需要和你的X、Y数据长度完全一致的序列——每个数据点都得对应一个颜色标识,而不是直接传类别本身。

下面给你两种实用的解决方案:

方法1:将类别转换为数值编码(适合类别较多的情况)

用pandas的factorize()方法把每个类别映射成唯一整数,这样每个数据点都能对应一个数值,c参数就能正确识别:

import pandas as pd
import matplotlib.pyplot as plt

# 给每个类别生成唯一的数值编码
df['cat_code'] = pd.factorize(df['Category'])[0]

# 绘制散点图,用数值编码做颜色映射
plt.scatter(df['X'], df['Y'], c=df['cat_code'], cmap='viridis')

# 添加颜色条并对应回类别名称
unique_cats = pd.unique(df['Category'])
color_bar = plt.colorbar(ticks=range(len(unique_cats)))
color_bar.set_ticklabels(unique_cats)
color_bar.set_label('Category')

plt.show()

方法2:自定义类别-颜色映射(适合类别较少、需要固定颜色的情况)

如果你的类别数量不多,可以直接给每个类别指定固定颜色,更直观:

import pandas as pd
import matplotlib.pyplot as plt

# 自定义每个类别的颜色(按需扩展)
color_map = {
    'A': '#FF5733',
    'B': '#33FF57',
    'C': '#3357FF',
    # 其他类别继续添加...
}

# 用map方法把类别转换成对应的颜色
plt.scatter(df['X'], df['Y'], c=df['Category'].map(color_map))

# 添加图例
handles = [plt.scatter([], [], color=color_map[cat], label=cat) for cat in color_map.keys()]
plt.legend(handles=handles, title='Category')

plt.show()

两种方法都能解决你原来的长度不匹配问题,根据你的类别数量和需求选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:43:52