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

基于Pandas DataFrame绘制多颜色散点图

解决plt.scatter传入分类型列着色的错误问题

哦,这个问题我之前也碰到过!原因很简单:plt.scatter()的c参数只接受数值型数据,而你的col3是分类型(不管是字符串还是Pandas的category类型),直接传入会触发类型错误——matplotlib没法把字符串直接映射成颜色值。

下面给你几种实用的解决方法:

方法1:用Pandas分类编码转数值

把分类型列转换成对应的数值编码,再传给c参数,然后手动添加图例对应原分类:

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import cm

# 示例数据
data = pd.DataFrame({
    "col1": [1, 2, 3, 4, 5],
    "col2": [5, 4, 3, 2, 1],
    "col3": ["A", "B", "A", "C", "B"]
})

# 将col3转为分类编码
cat_col = data["col3"].astype("category")
color_codes = cat_col.cat.codes

# 绘制散点图
plt.scatter(data["col1"], data["col2"], c=color_codes, cmap=cm.tab10)

# 添加对应原分类的图例
unique_cats = cat_col.cat.categories
for idx, cat in enumerate(unique_cats):
    plt.scatter([], [], c=cm.tab10(idx), label=cat)
plt.legend(title="col3")
plt.xlabel("col1")
plt.ylabel("col2")
plt.show()

方法2:用Seaborn快速实现(最省心)

Seaborn的scatterplot()原生支持分类型列作为颜色区分参数(hue),自动帮你处理颜色映射和图例,代码极简:

import seaborn as sns
import pandas as pd

# 示例数据
data = pd.DataFrame({
    "col1": [1, 2, 3, 4, 5],
    "col2": [5, 4, 3, 2, 1],
    "col3": ["A", "B", "A", "C", "B"]
})

# 一行代码搞定
sns.scatterplot(data=data, x="col1", y="col2", hue="col3")
plt.show()

方法3:手动指定分类-颜色映射

如果需要自定义每个分类的颜色,直接创建一个映射字典,把每个分类映射到具体颜色:

import matplotlib.pyplot as plt
import pandas as pd

# 示例数据
data = pd.DataFrame({
    "col1": [1, 2, 3, 4, 5],
    "col2": [5, 4, 3, 2, 1],
    "col3": ["A", "B", "A", "C", "B"]
})

# 自定义分类到颜色的映射
color_map = {"A": "#ff4444", "B": "#0099cc", "C": "#99cc00"}
# 给每行数据匹配对应颜色
point_colors = data["col3"].map(color_map)

# 绘制散点图
plt.scatter(data["col1"], data["col2"], c=point_colors)

# 添加图例
legend_handles = [plt.scatter([], [], c=color_map[cat], label=cat) for cat in color_map.keys()]
plt.legend(handles=legend_handles, title="col3")
plt.xlabel("col1")
plt.ylabel("col2")
plt.show()

方法对比

  • 方法1:适合需要用纯matplotlib的场景,灵活性强但需要手动处理图例;
  • 方法2:最快最省心,适合快速探索数据,Seaborn会自动优化可视化效果;
  • 方法3:完全自定义颜色,适合需要严格符合品牌色或特定配色的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:48:13