[英]How to connect two line segments without changing their directions in matplotlib?
假设我有两条斜率不同的线段,一条的x
范围从 -0.5 到 -0.1,另一条的x
范围从 0 到 0.5。 我想把matplotlib到plot这两条线段连接成一条线。 这是我当前的代码
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(-0.5, 0.51, 0.1)
y1 = np.linspace(2, 10.5, 5)
y2 = np.linspace(11, 1, 6)
plt.ylim([0, 14])
plt.plot(x, np.concatenate([y1,y2]), marker='o')
plt.show()
但是,我想要的是将两条线段延伸到它们的交点。 预期的 plot 如下所示
我想要一个通用的解决方案,它可以生成连接任意两个给定线段y1
和y2
的 plot 。 请注意,我只想拥有 11 个标记。 有什么建议么?
您可以这样做(如果需要,可以更好地格式化):
import numpy as np
from matplotlib import pyplot as plt
from scipy.stats import linregress
def line_intersect(m1, b1, m2, b2):
x = (b2 - b1) / (m1 - m2)
y = m1 * x + b1
return x,y
x = np.arange(-0.5, 0.51, 0.1)
y1 = np.linspace(2, 10.5, 5)
y2 = np.linspace(11, 1, 6)
y1_lin = linregress(x[:2], y1[:2])
y2_lin = linregress(x[-2:], y2[-2:])
intersection_point = line_intersect(y1_lin.slope, y1_lin.intercept, y2_lin.slope, y2_lin.intercept)
x3 = np.array([x[0], intersection_point[0], x[-1]])
y3 = np.array([y1[0], intersection_point[1], y2[-1]])
plt.ylim([0, 14])
plt.plot(x, np.concatenate([y1,y2]), marker='o', color='blue', linestyle='None')
plt.plot(x3, y3, marker='', color='blue')
plt.show()
基本上,所有发生的事情是我计算两条线相交的位置,并使用它来创建一个带有 3 个数据点的小型新 x、y 映射,中间是交点,其他是 x 的端点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.