python matplotlib

python - matplotlib: línea extendida sobre 2 puntos de control



set title matplotlib (3)

En matplotlib podemos dibujar líneas usando al menos 2 métodos:

  1. plt.plot

    plt.plot([1,2],[1,2],color=''k'',marker=''o'')

  2. Método line2d

    line = lines.Line2D([0.3,0.6],[0.9,0.3],linestyle=''dashed'',color=''k'') plt.axes().add_line(line)

Sospecho que ambos métodos son los mismos en la implementación, por supuesto. Pero de todos modos, dibuja una línea exactamente entre 2 puntos establecidos. A veces necesito extender la línea sobre esos 2 puntos hasta los límites del gráfico. Claro que puedo calcularlo en forma de y = ax + b, pero ¿alguien sabe de una manera más fácil?

Estuche perfecto si puedo poner alguna opción adicional, pero no pude encontrarlo.


Después de un buen almuerzo, pude encontrar una manera de usar Npypy.

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


Espero que esto ayude

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)


Poco tarde en esto, pero acabo de encontrar esto mientras buscaba en Google. También estaba harta de no poder hacer esto en matplotlib, así que escribí abline_plot. Incluye devoluciones de llamada para actualizar una línea 2D si se cambian los límites de los ejes.

Busque los ejemplos de abline_plot en el enlace de abajo.

http://statsmodels.sourceforge.net/devel/examples/generated/example_interactions.html

Documentación:

http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.regressionplots.abline_plot.html#statsmodels.graphics.regressionplots.abline_plot

Implementación:

https://github.com/statsmodels/statsmodels/blob/master/statsmodels/graphics/regressionplots.py#L572

Edición: Una más simple que no se actualiza.

import matplotlib.pyplot as plt from matplotlib import lines as mpl_lines def slope_from_points(point1, point2): return (point2[1] - point1[1])/(point2[0] - point1[0]) def plot_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()