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

如何在Plotly K线图的两个指定日期最高价点之间绘制直线

解决方案

你可以先从数据源中提取两个指定日期对应的最高价,再通过Plotly的图形配置添加直线即可,完整修改后的代码如下:

import plotly.graph_objects as go
import pandas as pd
from datetime import datetime

# 构建从起始到结束的完整时间序列
dt_all = pd.date_range(start=raw_bn1['Date'].iloc[0],end=raw_bn1['Date'].iloc[-1])

# 提取原始数据集中存在的日期
dt_obs = [d.strftime("%Y-%m-%d") for d in pd.to_datetime(raw_bn1['Date'])]

# 筛选出缺失的日期用于后续X轴配置
dt_breaks = [d for d in dt_all.strftime("%Y-%m-%d").tolist() if not d in dt_obs]

fig = go.Figure(data=[go.Candlestick(x=raw_bn1['Date'],
                open=raw_bn1['Open'],
                high=raw_bn1['High'],
                low=raw_bn1['Low'],
                close=raw_bn1['Close'])])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.update_xaxes(rangebreaks=[dict(values=dt_breaks)])

# ---------------------- 新增添加直线的代码 ----------------------
# 1. 定义两个目标日期
date1 = '2020-12-01'
date2 = '2021-08-13'

# 2. 匹配两个日期对应的最高价,先统一Date列格式为datetime避免匹配失败
raw_bn1['Date'] = pd.to_datetime(raw_bn1['Date'])
high1 = raw_bn1.loc[raw_bn1['Date'] == date1, 'High'].values[0]
high2 = raw_bn1.loc[raw_bn1['Date'] == date2, 'High'].values[0]

# 3. 添加直线,两种方式按需选择
# 方式一:用shape添加,轻量无额外图例,适合仅展示连线的场景
fig.add_shape(
    type="line",
    x0=date1, y0=high1,
    x1=date2, y1=high2,
    line=dict(
        color="Red", # 自定义直线颜色
        width=2, # 自定义直线粗细
        dash="dash" # 如需实线可删除该参数
    )
)

# 方式二:添加Scatter trace,适合需要展示图例、hover信息的场景
# fig.add_trace(go.Scatter(
#     x=[date1, date2],
#     y=[high1, high2],
#     mode='lines',
#     name='最高价连线',
#     line=dict(color='Red', width=2)
# ))
# ---------------------------------------------------------------

fig.show()
  • 运行前请确认两个指定日期在raw_bn1的Date列中存在,避免匹配不到值报错,如需模糊匹配日期可调整loc的筛选逻辑
  • 直线的颜色、粗细、线型都可以根据需求调整line参数内的配置值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:01