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

如何根据第三列作为图例绘制x、y坐标列的散点图

按DataFrame类别列设置散点图颜色的解决方案

你之前尝试的两种方法都无法实现按type列着色的原因:

  • 第一种方法中,plt.scatter一次性绘制所有点,没有区分不同类别的颜色,plt.legend(df["type"])会错误地将每个数据点都作为图例项,完全不符合需求。
  • 第二种方法里,df.plot.scatter的legend参数仅控制是否显示图例,不支持按指定列分组着色,因此无法达到按类别区分颜色的效果。

下面提供三种可行的解决方案:

方法1:Matplotlib手动分组绘制

先筛选出不同类别的数据子集,分别调用scatter绘制并指定颜色,最后添加图例:

import pandas as pd
import matplotlib.pyplot as plt

data = {"x" : [1, 2, 3, 4, 5], 
        "y" : [1, 2, 3, 4, 5], 
        "type" : ["one", "one", "one", "two", "two"]}
df = pd.DataFrame(data)

# 筛选两类数据
group_one = df[df["type"] == "one"]
group_two = df[df["type"] == "two"]

# 分别绘制散点并设置颜色、标签
plt.scatter(group_one["x"], group_one["y"], color="blue", label="one")
plt.scatter(group_two["x"], group_two["y"], color="red", label="two")

plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.show()

方法2:Seaborn快速实现(推荐)

Seaborn的scatterplot支持通过hue参数直接指定分组列,自动完成颜色区分和图例添加,代码更简洁:

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

data = {"x" : [1, 2, 3, 4, 5], 
        "y" : [1, 2, 3, 4, 5], 
        "type" : ["one", "one", "one", "two", "two"]}
df = pd.DataFrame(data)

sns.scatterplot(data=df, x="x", y="y", hue="type")
plt.show()

方法3:Pandas分组遍历绘图

利用groupby对DataFrame按type分组,遍历每个分组并指定对应颜色绘制:

import pandas as pd
import matplotlib.pyplot as plt

data = {"x" : [1, 2, 3, 4, 5], 
        "y" : [1, 2, 3, 4, 5], 
        "type" : ["one", "one", "one", "two", "two"]}
df = pd.DataFrame(data)

# 定义类别与颜色的映射关系
color_map = {"one": "#2ecc71", "two": "#e74c3c"}

# 遍历每个分组绘制散点
for type_name, group_data in df.groupby("type"):
    plt.scatter(group_data["x"], group_data["y"], color=color_map[type_name], label=type_name)

plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:25