Matplotlib: Extended Line Over 2 Control Points
Solution 1:
After good lunch I was able to find a way using numpy.
def drawLine2P(x,y,xlims):
xrange = np.arange(xlims[0],xlims[1],0.1)
A = np.vstack([x, np.ones(len(x))]).T
k, b = np.linalg.lstsq(A, y)[0]
plt.plot(xrange, k*xrange + b, 'k')
Solution 2:
Little late on this, but I just came across this while googling. I was also sick of not being able to do this in matplotlib, so I wrote abline_plot. It includes callbacks to update a 2D line if the axes limits are changed.
Search for the abline_plot examples in the link below.
http://statsmodels.sourceforge.net/devel/examples/generated/example_interactions.html
Documentation:
Implementation:
https://github.com/statsmodels/statsmodels/blob/master/statsmodels/graphics/regressionplots.py#L572
Edit: A simpler one that doesn't update
import matplotlib.pyplot as plt
from matplotlib import lines as mpl_lines
defslope_from_points(point1, point2):
return (point2[1] - point1[1])/(point2[0] - point1[0])
defplot_secant(point1, point2, ax):
# plot the secant
slope = slope_from_points(point1, point2)
intercept = point1[1] - slope*point1[0]
# update the points to be on the axes limits
x = ax.get_xlim()
y = ax.get_ylim()
data_y = [x[0]*slope+intercept, x[1]*slope+intercept]
line = mpl_lines.Line2D(x, data_y, color='red')
ax.add_line(line)
return ax.figure()
Solution 3:
Hope this helps
import matplotlib.pyplot as plt
# I am generating 2 random points, u might want to update these
x1,y1,x2,y2 = np.random.uniform(-1,1,4)
# make use of line equation to form function line_eqn(x) that generated y
line_eqn = lambda x : ((y2-y1)/(x2-x1)) * (x - x1) + y1
# generate range of x values based on your graph
xrange = np.arange(-1.2,1.2,0.2)
# plot the line with generate x ranges and created y ranges
plt.plot(xrange, [ line_eqn(x) for x in xrange], color='k', linestyle='-', linewidth=2)
Solution 4:
Way late, but here's the easiest answer for anyone who stumbles upon this like I did,
As of matplotlib 3.3, you can do this with plt.axline((x1, y1), (x2, y2))
.
Post a Comment for "Matplotlib: Extended Line Over 2 Control Points"