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

