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

