python:在matplotlib中绘制垂直线

时间:2018-10-25 14:37:41

标签: python matplotlib

我制作了一个图形并在该图形上绘制了一条垂直线,问题是我无法注释图形和垂直线的接触点 这是代码:

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()

1 个答案:

答案 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
            )

enter image description here