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

如何在Matplotlib中延长两线段至交点并连接(保持方向)

解决方案

要实现两条线段延长至交点并连接,同时保留原始11个标记点,可按以下步骤操作:

核心思路

  1. 从原始数据中提取两条线段的端点,推导各自的直线方程
  2. 求解两条直线的交点坐标
  3. 基于直线方程生成延长至交点的平滑线条
  4. 叠加绘制原始标记点,确保只保留11个标记

完整代码

import numpy as np
from matplotlib import pyplot as plt

# 1. 定义原始数据
x_original = np.arange(-0.5, 0.51, 0.1)
y1 = np.linspace(2, 10.5, 5)
y2 = np.linspace(11, 1, 6)
y_original = np.concatenate([y1, y2])

# 2. 获取两条线段的端点
# 左线段(x∈[-0.5, -0.1])的首尾端点
x1_start, y1_start = x_original[0], y1[0]
x1_end, y1_end = x_original[4], y1[-1]
# 右线段(x∈[0, 0.5])的首尾端点
x2_start, y2_start = x_original[5], y2[0]
x2_end, y2_end = x_original[-1], y2[-1]

# 3. 计算两条直线的斜率与交点
m1 = (y1_end - y1_start) / (x1_end - x1_start)  # 左线段斜率
m2 = (y2_end - y2_start) / (x2_end - x2_start)  # 右线段斜率

# 联立直线方程求解交点
x_intersect = (m1 * x1_start - m2 * x2_start + y2_start - y1_start) / (m1 - m2)
y_intersect = m1 * (x_intersect - x1_start) + y1_start

# 4. 生成延长后的平滑线条数据
x_left_extend = np.linspace(x1_start, x_intersect, 100)  # 左线段延长至交点
y_left_extend = m1 * (x_left_extend - x1_start) + y1_start
x_right_extend = np.linspace(x_intersect, x2_end, 100)  # 右线段延长至交点
y_right_extend = m2 * (x_right_extend - x2_start) + y2_start

# 5. 绘制图形
plt.ylim([0, 14])
# 绘制延长后的连续线条
plt.plot(x_left_extend, y_left_extend, color='blue')
plt.plot(x_right_extend, y_right_extend, color='blue')
# 绘制原始11个标记点(仅显示标记,无连接线条)
plt.plot(x_original, y_original, marker='o', color='blue', linestyle='None')

plt.show()

代码说明

  • 通用性:只需替换y1和y2的原始数据,即可处理任意斜率不同的两条线段
  • 标记点控制:通过单独绘制原始x_original和y_original并设置linestyle='None',确保仅保留11个原始标记点
  • 平滑线条:用linspace生成100个点绘制延长线,保证线条流畅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:01:04