Plotly分组堆叠柱状图:基于DataFrame列设置颜色与透明度
问题:Plotly分组堆叠柱状图中为指定组设置透明度区分并列组?
我正在使用Plotly绘制分组堆叠柱状图,已为各plot_label类别配置了颜色字典colour_dict,但希望区分Actual和Projected组,为其中一组设置不同的透明度。现有数据结构及绘图代码如下:
数据结构
year subplot plot_label value 0 2019 Projected Category 1 3.1 1 2020 Projected Category 1 3.0 2 2021 Projected Category 1 2.8 3 2019 Projected Category 2 3.1 4 2020 Projected Category 2 3.0 5 2021 Projected Category 2 2.8 6 2019 Actual Category 1 3.1 7 2020 Actual Category 1 3.0 8 2021 Actual Category 1 2.8 9 2019 Actual Category 2 3.1 10 2020 Actual Category 2 3.0 11 2021 Actual Category 2 2.8
当前绘图代码
colour_dict = {'Category 1': '#123', 'Category 2': '#456'} fig = px.bar(df, x='subplot', y='value', facet_col='year', color='plot_label', facet_col_spacing=0.01, color_discrete_map=colour_dict)
当前Actual和Projected组的颜色基于plot_label类别一致,请问能否为其中一组调整透明度以区分并列柱状图?
解决方案
完全可以实现。Plotly Express没有直接提供按subplot分组设置透明度的参数,但可以通过修改生成图表的trace属性来完成,具体步骤如下:
- 先运行现有代码生成基础图表;
- 遍历图表的所有trace,根据trace对应的
subplot分组,为目标组设置opacity(透明度)属性。
示例代码
colour_dict = {'Category 1': '#123', 'Category 2': '#456'} fig = px.bar(df, x='subplot', y='value', facet_col='year', color='plot_label', facet_col_spacing=0.01, color_discrete_map=colour_dict) # 遍历所有trace,为Projected组设置透明度(0-1取值,值越小越透明) for trace in fig.data: # 每个trace的x轴数据全部属于同一个subplot,取第一个元素判断分组 if trace.x[0] == 'Projected': trace.opacity = 0.6 # 若需要也可给Actual组单独设置,比如 else: trace.opacity = 1.0 fig.show()
说明
- 每个trace对应一个
plot_label在某年份子图中的数据,其x属性的所有元素都属于同一个subplot(Actual或Projected),因此取第一个元素即可判断所属分组; - 调整
opacity的值控制透明度,比如0.6表示60%不透明度,能有效区分两组数据; - 如果后续图表结构有变化,可通过trace的自定义数据或其他属性判断分组,但当前数据结构下上述方法完全适用。
内容的提问来源于stack exchange,提问作者thosphor
相关产品推荐
相关产品推荐

