You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly Express叠加柱状图(barmode=overlay)图例与柱子透明度不匹配求助

问题

使用Plotly Express绘制分面柱状图并设置barmode="overlay"实现柱子叠加后,出现图例与柱子透明度不匹配的问题:图表中的柱子带有一定透明度,但图例中的颜色色块完全不透明,即使是非重叠区域的柱子透明度也和图例不一致。

代码示例:

import pandas
import plotly.express as px

df = pandas.DataFrame({
    'group':['first', 'first', 'second', 'second', 'comb', 'comb'],
    'month':[1,2,1,2,1,2],
    'prop1':[.3,.4,0,0,.3,.4],
    'prop2':[0,0,.5,.3,.5,.3]
})

fig = px.bar(df, x="month", y=["prop1", "prop2"],
             barmode="overlay", facet_col='group', facet_col_wrap=3)            
fig.show()

解决方案

Plotly Express在barmode="overlay"模式下会默认给柱子设置opacity=0.7,但不会同步应用到图例上。可以通过遍历图表的所有trace,统一设置柱子和图例的透明度,解决视觉不一致的问题:

import pandas
import plotly.express as px

df = pandas.DataFrame({
    'group':['first', 'first', 'second', 'second', 'comb', 'comb'],
    'month':[1,2,1,2,1,2],
    'prop1':[.3,.4,0,0,.3,.4],
    'prop2':[0,0,.5,.3,.5,.3]
})

fig = px.bar(df, x="month", y=["prop1", "prop2"],
             barmode="overlay", facet_col='group', facet_col_wrap=3)

# 自定义目标透明度,可根据需求调整
target_opacity = 0.7
for trace in fig.data:
    # 设置柱子的透明度
    trace.opacity = target_opacity
    # 同步图例色块的透明度
    trace.legenditem = {"opacity": target_opacity}

fig.show()

关键说明

  • 遍历fig.data中的每个trace(每个trace对应一组柱子),统一设置透明度
  • 通过legenditem属性直接修改图例色块的透明度,确保图例与柱子视觉效果一致
  • 目标透明度可以自定义,不一定局限于默认的0.7

内容的提问来源于stack exchange,提问作者rds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:32:53