Plotly中可为第二个Y轴加水平线,却无法为第二个X轴加竖线
解决Plotly中为第二个X轴添加竖线的问题
修正后的可运行代码
import pandas as pd import plotly.express as px import plotly.graph_objects as go df = pd.DataFrame( { "A": [5, 4, 7], "B": [200, 300, 100], }, index=[1, 2, 3], ) fig = px.bar( df["A"], orientation="h", ) fig.add_trace( go.Scatter( y=df.index, x=df["B"], xaxis="x2", name="B", ) ) # 用add_shape替代add_vline,精准指定副X轴 fig.add_shape( type="line", x0=df["B"].mean(), y0=0, x1=df["B"].mean(), y1=1, xref="x2", yref="paper", line=dict(color="red", width=2) ) fig.update_layout( xaxis_title=None, yaxis_title=None, legend_title=None, yaxis=dict( autorange="reversed", ), xaxis=dict( side="top", showgrid=False, ), xaxis2=dict( overlaying="x", side="bottom", showgrid=False, # 可选:手动设置副X轴范围,确保竖线在可视区域内 range=[df["B"].min() - 50, df["B"].max() + 50] ), ) fig.show()
核心修改点说明
- 替换
add_vline为add_shape:add_vline在处理副X轴时存在兼容性问题,直接使用add_shape可以明确指定参考轴为x2,避免识别错误。 - 设置
yref="paper":让竖线贯穿整个图表的高度(0对应图表底部,1对应顶部),不受Y轴数据范围的限制,保证竖线完整显示。 - 可选配置
xaxis2范围:手动指定副X轴的数值范围,确保竖线的位置落在轴的可视区间内,防止自动缩放导致竖线被隐藏。
效果验证
修改后,竖线会准确出现在第二个X轴(底部)的均值位置,与副X轴的刻度完全对齐,同时不会干扰主X轴(顶部)的内容展示。
内容的提问来源于stack exchange,提问作者chaosink
相关产品推荐
相关产品推荐

