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

如何基于两个DataFrame列设置Plotly Express散点图的color图例颜色

实现方案

Plotly Express 的 color 参数原生不支持直接传入多个列名,你可以通过以下两种常用方案实现需求:

方案1:构造组合类别列(保留图例分类)

先将两列的取值组合为新的分类列,再基于该列设置颜色,支持自定义每个组合对应的颜色:

import pandas as pd
import plotly.express as px

df = pd.DataFrame(
    {
        "A": [2,8,7,9,6],
        "B": ["F", "P", "P", "P", "P"],
        "C": [1,7,9,6,1],
        "D": ["F", "P", "P", "P", "F"],
    }
)
# 构造两列组合的分类列
df["color_group"] = df["B"] + "-" + df["D"]
# 自定义颜色映射,可按你的需求调整
color_map = {
    "F-F": "blue",
    "F-P": "blue",
    "P-F": "blue",
    "P-P": "red"
}
fig = px.scatter(df, x="A", y="C", color="color_group", color_discrete_map=color_map)
fig.show()

方案2:直接生成颜色列(适合简单规则)

如果你的颜色规则逻辑简单,可直接用条件判断生成颜色值列,绘图时直接使用该列即可:

# 规则:只要B或D取值为F就设为蓝色,否则设为红色
df["point_color"] = df.apply(lambda row: "blue" if row["B"] == "F" or row["D"] == "F" else "red", axis=1)
fig = px.scatter(df, x="A", y="C", color="point_color", color_discrete_map="identity")
fig.show()

两种方案都可以实现你预期的效果,示例中A=6、C=1的点会被正确标记为蓝色:
散点图效果示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:57:03