Plotly双轴图表:隐藏副X轴日期值与调整图层顺序
Plotly双轴图表问题解决方案
核心问题修复方案
1. 顶部副X轴仅显示分类标签
副X轴默认会继承主X轴的日期刻度,需通过配置隐藏默认刻度,手动指定分类标签的位置与文本。
2. 柱状图置于折线图下方
Plotly按图表添加顺序渲染图层,先添加柱状图,再添加折线图,即可让折线图覆盖在柱状图上方。
修改后的完整代码
import plotly.graph_objects as go import pandas as pd # 模拟示例数据 dates = pd.date_range(start='2023-01-01', periods=30, freq='D') values_bar = [10, 12, 15] * 10 values_line = [20, 22, 25] * 10 df = pd.DataFrame({'date': dates, 'bar_value': values_bar, 'line_value': values_line}) # 定义阶段区间并计算标签中心位置 pre_dates = df[df['date'] <= '2023-01-10']['date'] during_dates = df[(df['date'] > '2023-01-10') & (df['date'] <= '2023-01-20')]['date'] post_dates = df[df['date'] > '2023-01-20']['date'] pre_center = pre_dates.mean() during_center = during_dates.mean() post_center = post_dates.mean() fig = go.Figure() # 先添加柱状图(确保在底层) fig.add_trace(go.Bar( x=df['date'], y=df['bar_value'], name='柱状图', yaxis='y1' )) # 后添加折线图(自动在顶层) fig.add_trace(go.Scatter( x=df['date'], y=df['line_value'], name='折线图', yaxis='y2', line=dict(width=2) )) # 配置底部主X轴 fig.update_xaxes( title='日期', type='date' ) # 配置顶部副X轴:隐藏默认刻度,仅显示分类标签 fig.update_xaxes( title='阶段', type='date', showticklabels=False, # 隐藏默认日期刻度 ticktext=['pre', 'during', 'post'], tickvals=[pre_center, during_center, post_center], side='top', anchor='free', overlaying='x', position=1 ) # 配置左右Y轴 fig.update_yaxes( title='柱状图数值', side='left', position=0.1 ) fig.update_yaxes( title='折线图数值', side='right', overlaying='y' ) # 布局优化 fig.update_layout( title='双轴叠加图表', barmode='overlay', # 允许柱状图与折线图叠加 margin=dict(l=100, r=100, t=100, b=100) ) fig.show()
关键改动说明
- 图层顺序:先添加柱状图再添加折线图,利用Plotly的渲染顺序实现层级关系。
- 副X轴配置:通过
showticklabels=False隐藏默认日期刻度,ticktext和tickvals绑定分类文本与对应区间的中心位置,精准显示需要的标签。 - 叠加模式:设置
barmode='overlay',保证柱状图和折线图在同一X轴区域正常显示,避免布局偏移。
内容的提问来源于stack exchange,提问作者Chronicles
相关产品推荐
相关产品推荐

