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

如何让Plotly散点图显示在注释上方?

解决Plotly散点被注释遮挡的问题

核心问题分析

Plotly的默认图层顺序为:图形形状(Shapes) → 数据轨迹(Traces) → 注释(Annotations),注释会默认显示在散点等轨迹上方,而add_annotation()确实没有zorder参数,因此需要通过调整实现注释在散点下方的效果。

方案一:用add_shape替代add_annotation添加文本

将注释文本转换为形状文本,形状的层级低于轨迹,散点会自动显示在文本上方:

# 先批量添加注释形状
for i, px in enumerate(data['xpos']):
    nice = timegraph['nice'][i]
    fig.add_shape(
        type="text",
        x=px,
        y=0,
        xshift=10,
        yshift=80,
        text=f"<a href='{data['urls'][i]}' target='_blank'>{px} - {nice}</a>",
        textangle=270,
        fillcolor="#FFFFFF",
        line_color="#FFFFFF",  # 匹配背景色消除边框
        layer="below"  # 明确指定形状在轨迹下方
    )

# 仅添加一次散点轨迹(移出循环,避免重复生成相同轨迹)
fig.add_trace(
    go.Scatter(
        x=data['xpos'],
        y=timegraph['ygrid'],
        yaxis="y2",
        name="Total Testrun Time",
        marker={'color': 'gray', 'size': 15},
        text=timegraph['nice'],
        mode='markers'
    )
)

方案二:显式设置轨迹层级(兼容原有注释逻辑)

如果坚持使用add_annotation,可以强制将散点轨迹的layer设为'above',确保轨迹优先级高于注释:

# 先添加所有注释
for i, px in enumerate(data['xpos']):
    nice = timegraph['nice'][i]
    fig.add_annotation(
        x=px, xshift=10, y=0, yshift=80, 
        text=f"<a href='{data['urls'][i]}' target='_blank'>{px} - {nice}</a>", 
        textangle=270, bgcolor="#FFFFFF"
    )

# 添加散点轨迹并强制层级为最高
fig.add_trace(
    go.Scatter(
        x=data['xpos'],
        y=timegraph['ygrid'],
        yaxis="y2",
        name="Total Testrun Time",
        marker={'color': 'gray', 'size': 15},
        text=timegraph['nice'],
        mode='markers',
        layer='above'
    )
)

关键修正:避免重复生成轨迹

你的原始代码在循环内重复调用add_trace,会生成len(data['xpos'])个完全相同的散点轨迹,既浪费资源又可能引发显示异常,务必将add_trace移出循环,仅执行一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:47:19