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

Plotly 叠加(overlay)柱状图如何始终将更低的柱子置于最上层显示

Plotly overlay模式柱状图遮挡问题解决方法

overlay模式下Plotly会按trace添加顺序绘制图层,先添加的柱子在下层,同位置上层高数值柱子会直接遮挡下层低数值柱子,可通过以下两种方案解决:

方案1:设置透明度(改动最小,适配多数场景)

给所有柱状图系列添加opacity参数设置半透明,下层被遮挡的柱子可透过上层显示:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(data={'date': pd.date_range("2020-01-01", periods=2, freq="D"), 'value': [40,20]})
df2 = pd.DataFrame(data={'date': pd.date_range("2020-01-01", periods=2, freq="D"), 'value': [20,40]})

fig = go.Figure(data=[
    go.Bar(name='SF Zoo', x=df['date'], y=df['value'], opacity=0.6),
    go.Bar(name='LA Zoo', x=df2['date'], y=df2['value'], opacity=0.6),
])

fig.update_layout(barmode='overlay')
fig.show()

推荐透明度设置在0.5~0.7区间,兼顾辨识度和可读性。

方案2:差异化柱宽(适配需要完全不透明的场景)

给不同系列设置不同宽度,将宽度更小的系列后添加(置于上层),即可避免遮挡:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(data={'date': pd.date_range("2020-01-01", periods=2, freq="D"), 'value': [40,20]})
df2 = pd.DataFrame(data={'date': pd.date_range("2020-01-01", periods=2, freq="D"), 'value': [20,40]})

fig = go.Figure()
# 底层先画宽柱
fig.add_trace(go.Bar(name='SF Zoo', x=df['date'], y=df['value'], width=0.4))
# 上层后画窄柱
fig.add_trace(go.Bar(name='LA Zoo', x=df2['date'], y=df2['value'], width=0.2))

fig.update_layout(barmode='overlay')
fig.show()

如果需要更灵活的适配所有数值交叉的场景,可以遍历每个x轴取值对比两个系列的数值,动态将当前x位置数值更小的柱子设置为窄柱置于上层即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:02