如何基于两个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
相关产品推荐
相关产品推荐

