Plotly堆叠条形图:多年份选择时单条颜色异常问题求助
Dash堆叠条形图多时间段颜色异常解决方案
问题根源
当选择多年数据时,Plotly默认复用了首个条形的颜色映射逻辑,未为14个独立条形分别分配专属色阶,导致所有条形颜色趋同。
具体解决方案
为每个条形独立绑定色阶
放弃全局设置color_scale,为14个条形分别指定不同色阶(可从Plotly内置色阶库选取14种,或自定义渐变)。生成每个条形的trace时,单独配置对应的colorscale,并设置showscale=False避免重复显示色阶控件。子组颜色与条形强关联
处理多时段数据时,每个条形的堆叠子组颜色需基于对应条形的色阶生成。循环遍历每个x轴类别,为该类别下的所有子组数据生成匹配色阶的颜色列表,通过go.Bar的marker.color参数手动赋值,替代自动颜色映射。校验数据分组逻辑
确认多时段筛选后的数据是否按x轴类别(14个条形)和子组维度正确分组。若分组错误,会导致所有子组被归为同一类别,进而复用同一种颜色。可打印筛选后的DataFrame结构,验证每个类别下的子组数据完整性。
示例代码片段
import plotly.graph_objects as go import pandas as pd import plotly.colors # 定义14种不同的色阶(可根据需求调整) color_scales = [ plotly.colors.diverging.RdYlBu, plotly.colors.sequential.Blues, plotly.colors.sequential.Reds, plotly.colors.diverging.PRGn, plotly.colors.sequential.Greens, plotly.colors.diverging.PiYG, plotly.colors.sequential.Purples, plotly.colors.diverging.BrBG, plotly.colors.sequential.Oranges, plotly.colors.diverging.RdGy, plotly.colors.sequential.Greys, plotly.colors.diverging.RdBu, plotly.colors.sequential.YlOrBr, plotly.colors.diverging.Spectral ] # 假设filtered_df是经年份滑块筛选后的数据集 fig = go.Figure() categories = filtered_df['category'].unique() for idx, category in enumerate(categories): # 提取当前条形的专属数据 cat_data = filtered_df[filtered_df['category'] == category] # 获取对应色阶 current_scale = color_scales[idx] # 归一化子组数值,映射到色阶生成颜色列表 values = cat_data['value'] if values.max() != values.min(): norm_vals = (values - values.min()) / (values.max() - values.min()) else: norm_vals = [0.5] * len(values) subgroup_colors = [plotly.colors.sample_colorscale(current_scale, val)[0] for val in norm_vals] # 添加当前条形的堆叠trace fig.add_trace(go.Bar( x=[category] * len(cat_data), y=cat_data['value'], name=category, marker=dict(color=subgroup_colors), showscale=False )) fig.update_layout(barmode='stack')
内容的提问来源于stack exchange,提问作者Camilla
相关产品推荐
相关产品推荐

