Plotly分组散点图手动分配颜色代码失效问题求助
问题解决:Plotly color_discrete_map 不生效的修复方案
核心问题排查
你的代码存在两个关键问题,导致手动指定颜色不生效:
- DataFrame构造语法错误:
Oyl列表元素数量(13个)与Pt/Pl(15个)不匹配,且末尾多余的size=20, replace=True属于无效参数,直接导致DataFrame创建失败。 - 潜在数据列缺失:
hover_data中指定的H#、FM、O列未在构造的DataFrame中定义,会触发报错。
修复后的完整代码
import pandas as pd import plotly.express as px # 1. 构造格式正确的DataFrame,确保各列元素数量一致 df1 = pd.DataFrame({ 'Pt': [22, 55,44,22,19,14,48,53,44,19,6,62,65,6,30], 'Pl': [38,38,42,40,40,42,74,84,86,102,100, 64,72,80,92], 'Oyl': [27,21,21,27,27,27,21,21,33,22,22,33,21,27,33], # 补全至15个元素 'H#': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], # 补充hover所需列 'FM': ['A','B','C','A','B','C','A','B','C','A','B','C','A','B','C'], 'O': [10,20,30,40,50,60,70,80,90,100,110,120,130,140,150] }) # 2. 将Oyl转为字符串类型,确保与color_discrete_map的键匹配 df1["Oyl"] = df1["Oyl"].astype(str) # 3. 正确配置散点图,color_discrete_map按字符串键映射颜色 fig_ = px.scatter( df1, x="Pt", y="Pl", color="Oyl", hover_data=['H#', 'FM', 'O'], color_discrete_map={ "21": "#005900", "22": "#00FF00", "27": "#FF8000", "33": "#00FFFF" } ) fig_.show()
关键注意事项
- 确保
color_discrete_map的键与Oyl列的字符串值完全匹配(无空格、大小写一致)。 - 如果不需要
hover_data中的某些列,直接删除对应字段即可,避免因列缺失报错。 - 若原始数据
data_plot存在,可直接基于它处理Oyl列类型,无需重新构造DataFrame,注意保持数据完整性。
内容的提问来源于stack exchange,提问作者Taiwo
相关产品推荐
相关产品推荐

