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
相关产品推荐
相关产品推荐


