Home > Software engineering >  How to find the numeric value of the intersection point between an axvline and axline in matplotlib?
How to find the numeric value of the intersection point between an axvline and axline in matplotlib?

Time:04-30

I have the code below and I needed to find the numerical value of the intersection point between the axline and the axvline, I have no idea how to solve this in a simple way, does anyone know how to solve it? Infinite thanks in advance! :)

!pip install matplotlib==3.4

%matplotlib inline  
import matplotlib.pyplot as plt 

x = [0,2,4,6,8,10,12,14.3,16.2,18,20.5,22.2,25.1,
     26.1,28,30,33.3,34.5,36,38,40]
y = [13.4,23.7,35.1,48.3,62.7,76.4,91.3,106.5,119.6,131.3,
     146.9,157.3,173.8,180.1,189.4,199.5,215.2,220.6,227,234.7,242.2]
slope = (131.3-119.6)/(18-16.2)
plt.figure(figsize=(10, 5))
plt.axline((16.2,119.6), slope = slope, linestyle = '--', color = 'r')
plt.grid()
plt.minorticks_on()
plt.axvline(30,linestyle = '--', color = 'black')
plt.plot(x,y, linewidth = 2.5)
plt.show()

Plot Result

CodePudding user response:

First, you need to find the equation of the oblique line, y=slope*x q: that' easy to do, since you know the slope and a point of the line.

Next you solve the system of equations: y=slope*x q, x=x0 (the vertical line).

Here I plotted the intersection point with a green marker.

import matplotlib.pyplot as plt 

x = [0,2,4,6,8,10,12,14.3,16.2,18,20.5,22.2,25.1,
     26.1,28,30,33.3,34.5,36,38,40]
y = [13.4,23.7,35.1,48.3,62.7,76.4,91.3,106.5,119.6,131.3,
     146.9,157.3,173.8,180.1,189.4,199.5,215.2,220.6,227,234.7,242.2]
slope = (131.3-119.6)/(18-16.2)
plt.figure(figsize=(10, 5))

point_1 = (16.2, 119.6)
q = point_1[1] - slope * point_1[0]
x2 = 30
point_2 = (x2, slope * x2   q)
plt.axline(point_1, slope = slope, linestyle = '--', color = 'r')
plt.grid()
plt.minorticks_on()
plt.axvline(x2,linestyle = '--', color = 'black')
plt.plot(x,y, linewidth = 2.5)
plt.scatter(*point_2, color="g", s=100)
plt.show()
  • Related