我制作了一个图形并在该图形上绘制了一条垂直线,问题是我无法注释图形和垂直线的接触点 这是代码:
for p in range(limit):
pwf.append(random.randint(0,100))
for s in pwf:
flo_rate = pwf[i]*2
flowrate.append(flo_rate)
i += 1
plt.plot(flowrate,pwf)
plt.axvline(20)
plt.show()
答案 0 :(得分:0)
这是您的有效答案(不包括导入命令)。这个想法是这样的:使用间距很小的x网格对数据进行线性拟合(此处使用10000个网格点,也可以使用较小的网格)。从这些x网格点中减去20
,以得到与垂直线的距离。相交点的距离最短。使用min
找到该距离,然后获取对应的y值(pwf
),它将成为交点。
已获得此交点,请使用plt.annotate
用箭头和所需的文本注释该点。
pwf, flowrate = [[] for _ in range(2)]
limit = 200
for p in range(limit):
pwf.append(np.random.randint(0,100))
for i, s in enumerate(pwf):
flo_rate = pwf[i]*2
flowrate.append(flo_rate)
fit = np.poly1d(np.polyfit(flowrate,pwf, 1))
x_mesh = np.linspace(min(flowrate), max(flowrate), 10000)
idx = np.argmin(abs(x_mesh - 20))
plt.plot(flowrate,pwf)
plt.axvline(20)
plt.annotate('Intersection', xy=(20, 0.95*fit(x_mesh[idx])), xytext=(50, 15),
arrowprops=dict(arrowstyle="->"),fontsize=16
)