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

如何用Plotly Python绘制穿过两点且贯穿绘图区X方向的直线?

用Plotly画贯穿绘图区的直线(替代两点短线)

不用折腾画布像素坐标,直接基于数据坐标系推导直线方程就能解决,步骤如下:

1. 提取目标两点的坐标

先确认你要连线的两个数据点的时间和股价,比如:

# 替换成你实际的两个点数据
x1 = pd.to_datetime('2023-01-10')
y1 = 148.5
x2 = pd.to_datetime('2023-01-20')
y2 = 156.2

2. 计算直线的斜率和截距

因为X轴是时间序列,需要先把时间转成数值(Plotly内部用毫秒时间戳处理时间),再推导直线参数:

# 将时间转换为毫秒级数值
x1_num = x1.value // 10**6
x2_num = x2.value // 10**6

# 计算斜率k和截距b
k = (y2 - y1) / (x2_num - x1_num)
b = y1 - k * x1_num

3. 获取绘图区X轴范围,计算直线端点Y值

直接调用图表的X轴范围,代入直线方程算出左右两端的Y值:

# 假设fig是你的K线图对象
x_range = fig.layout.xaxis.range
# 将边界时间也转换为数值
x_left_num = pd.to_datetime(x_range[0]).value // 10**6
x_right_num = pd.to_datetime(x_range[1]).value // 10**6

# 算出直线左右端点的Y值
y_left = k * x_left_num + b
y_right = k * x_right_num + b

4. 添加贯穿直线到图表

用add_shape方法添加一条覆盖整个X轴范围的直线:

fig.add_shape(
    type='line',
    x0=x_range[0], y0=y_left,
    x1=x_range[1], y1=y_right,
    line=dict(color='purple', width=2),
    xref='x', yref='y'  # 基于数据坐标系,无需处理画布像素
)

额外提示

如果用户缩放或平移图表导致X轴范围变化,直线可能不再贯穿。需要动态更新的话,监听图表的relayout事件,每次范围变化时重新计算直线端点即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:35:38