Plotly Parcats平行类别图自定义颜色触发ValueError问题求助
报错根因
触发报错的直接原因是传入line.color的tips_df.quantized_tip字段值为字符串类型(报错信息里显示的'Low'就是该字段的实际值),但你配置的colorscale是基于0、1、2数值点位做的颜色映射,二者数据类型不匹配,Parcats组件无法自动完成字符串分类到数值色阶的对齐。
另外你当前代码里给quantized_tip维度配置的categoryarray=[0, 1, 2]也是无效配置,该维度的实际值是字符串分类,这个参数必须传入和维度值类型一致的类别列表才能生效。
修复方法
以下两种方法都可以实现最后一个维度各类别匹配专属颜色的需求:
- 方法1:数值编码映射适配数值色阶
先将字符串分类值映射为和色阶点位对应的整数值,再传入颜色参数即可:# 按你需要的颜色对应关系配置映射,key替换为quantized_tip字段的实际类别值 cat_to_num = {"Low": 0, "Medium": 1, "High": 2} line_color = tips_df["quantized_tip"].map(cat_to_num) colorscale = [[0, 'lightsteelblue'], [1, 'mediumseagreen'], [2, 'yellow']] # 修正维度的categoryarray配置,保证和映射顺序一致 quantized_tip = go.parcats.Dimension( values = tips_df['quantized_tip'], label = "Quantized tip", categoryorder = "category ascending", categoryarray=["Low", "Medium", "High"], ) # 绘图时传入处理后的颜色值 fig = go.Figure(data = [go.Parcats( dimensions=[sex_dim, smoker_dim, day_dim, time_dim, size_dim, quantized_total_bill, quantized_tip], line={'color': line_color, 'colorscale': colorscale} )]) - 方法2:直接传入逐样本的颜色值
不需要配置colorscale,直接把每个样本所属类别对应的颜色名/十六进制色值组成序列传入line.color即可,逻辑更直观:# 配置类别到颜色的直接映射 cat_to_color = {"Low": "lightsteelblue", "Medium": "mediumseagreen", "High": "yellow"} line_color = tips_df["quantized_tip"].map(cat_to_color) # 同样修正维度的categoryarray配置 quantized_tip = go.parcats.Dimension( values = tips_df['quantized_tip'], label = "Quantized tip", categoryorder = "category ascending", categoryarray=["Low", "Medium", "High"], ) # 绘图时不需要传colorscale参数 fig = go.Figure(data = [go.Parcats( dimensions=[sex_dim, smoker_dim, day_dim, time_dim, size_dim, quantized_total_bill, quantized_tip], line={'color': line_color} )])
后续update_traces和show的逻辑保持原有写法即可,修正后所有属于同一quantized_tip类别的流线条都会显示为指定的专属颜色,不会再触发类型报错。
内容的提问来源于stack exchange,提问作者Hyakkimaru
相关产品推荐
相关产品推荐

