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
相关产品推荐
相关产品推荐

