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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:03:24