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

Plotly散点图中为signals1=-1的点位添加标记失败如何解决

Plotly散点图条件标记不渲染问题修复

问题原因

你写的代码存在两个核心错误,导致标记无法正常显示:

  • y参数传值错误:当前代码写的y=[df['signals1'] == -1],是把一整个布尔判断结果序列包在了外层列表里,传入的y值是长度为1的对象,和x轴传入的全量日期索引长度完全不匹配,无法对应到具体坐标点。
  • 坐标逻辑和matplotlib实现不一致:matplotlib版本中你是直接筛选signals1 == -1对应的收盘价作为y轴值,而当前Plotly代码完全没有传入要标记的价格(Close列)数值,只传了布尔判断结果,自然无法定位到曲线上的点位。

当前错误渲染效果参考:
当前可视化效果

你提供的signals1前10行均为-1,修复后这10个交易日对应的收盘价位置都会正常显示标记。

修复方案

方案1:提前筛选点位(和matplotlib逻辑完全对齐,推荐)

先过滤出符合信号条件的行,再单独传入标记点的坐标:

# 筛选信号为-1的所有点位
sell_signals = df[df['signals1'] == -1]

fig = go.Figure(data=[
    # 你原本的收盘价曲线,没加的话补上
    go.Scatter(x=df.index, y=df['Close'], mode='lines', name='收盘价'),
    # 绘制信号标记
    go.Scatter(
        x=sell_signals.index,
        y=sell_signals['Close'],
        mode='markers',
        marker=dict(symbol='triangle-down', size=16, color='g'),
        name='Flag'
    )
])

方案2:NaN掩码法(无需提前筛选)

不满足条件的点位赋值为NaN,Plotly会自动跳过NaN值不渲染:

import numpy as np

fig = go.Figure(data=[
    go.Scatter(x=df.index, y=df['Close'], mode='lines', name='收盘价'),
    go.Scatter(
        x=df.index,
        # 满足信号条件取收盘价,否则取NaN
        y=np.where(df['signals1'] == -1, df['Close'], np.nan),
        mode='markers',
        marker=dict(symbol='triangle-down', size=16, color='g'),
        name='Flag'
    )
])

两种方案都能实现和matplotlib版本一致的标记效果,标记会精准落在收盘价曲线对应信号的日期位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:18:26