¿Cómo puedo obtener el sistema de coordenadas cartesianas en matplotlib?

Soy nuevo en la conspiración con Python y realmente no puedo encontrar una respuesta a la pregunta: ¿Cómo puedo obtener el plano de coordenadas cartesianas en matplotlib? Con esto quiero decir que las líneas de referencia perpendiculares (eje de coordenadas) terminaron con flechas, que se intersecan en el origen, (0,0), con el origen en el centro de la gráfica.

Piense en un plano para hacer geomtery de la escuela secundaria, el siguiente es un ejemplo perfecto de lo que necesito lograr:

Parcela con coordenadas cartesianas.

Si solo quieres trazar algunos puntos, dispersa lo que quieras

from pylab import * x = [0,2,-3,-1.5] y = [0,3,1,-2.5] color=['m','g','r','b'] scatter(x,y, s=100 ,marker='o', c=color) show() 

Para impresión bonita (con flechas y líneas discontinuas):

 from pylab import * import matplotlib.pyplot as plt x = [0,2,-3,-1.5] y = [0,3,1,-2.5] color=['m','g','r','b'] fig = plt.figure() ax = fig.add_subplot(111) scatter(x,y, s=100 ,marker='o', c=color) [ plot( [dot_x,dot_x] ,[0,dot_y], '-', linewidth = 3 ) for dot_x,dot_y in zip(x,y) ] [ plot( [0,dot_x] ,[dot_y,dot_y], '-', linewidth = 3 ) for dot_x,dot_y in zip(x,y) ] left,right = ax.get_xlim() low,high = ax.get_ylim() arrow( left, 0, right -left, 0, length_includes_head = True, head_width = 0.15 ) arrow( 0, low, 0, high-low, length_includes_head = True, head_width = 0.15 ) grid() show() 

Todavía hay trabajo por hacer, pero no está lejos del resultado:

introduzca la descripción de la imagen aquí

Creo que este ejemplo en la galería matplotlib debería acercarte lo suficiente: http://matplotlib.org/examples/axes_grid/demo_axisline_style.html

Esta es una pregunta antigua, pero creo que con las versiones de matplotlib de hoy, la palabra clave es espinas . Tu harías:

 ax = plt.gca() ax.spines['top'].set_color('none') ax.spines['bottom'].set_position('zero') ax.spines['left'].set_position('zero') ax.spines['right'].set_color('none') 

El enlace proporciona más ejemplos.

El siguiente código te dará un plano cartesiano.

 import matplotlib.pyplot as plt def build_cartesian_plane(max_quadrant_range): """ The quadrant range controls the range of the quadrants""" l = [] zeros = [] plt.grid(True, color='b', zorder=0,) ax = plt.axes() head_width = float(0.05) * max_quadrant_range head_length = float(0.1) * max_quadrant_range ax.arrow(0, 0, max_quadrant_range, 0, head_width=head_width, head_length=head_length, fc='k', ec='k',zorder=100) ax.arrow(0, 0, -max_quadrant_range, 0, head_width=head_width, head_length=head_length, fc='k', ec='k', zorder=100) ax.arrow(0, 0, 0, max_quadrant_range, head_width=head_width, head_length=head_length, fc='k', ec='k', zorder=100) ax.arrow(0, 0, 0, -max_quadrant_range, head_width=head_width, head_length=head_length, fc='k', ec='k', zorder=100) counter_dash_width = max_quadrant_range * 0.02 dividers = [0,.1,.2,.3,.4, .5, .6, .7, .8, .9, 1] for i in dividers: plt.plot([-counter_dash_width, counter_dash_width], [i*max_quadrant_range, i*max_quadrant_range], color='k') plt.plot([i * max_quadrant_range, i*max_quadrant_range], [-counter_dash_width, counter_dash_width], color='k') plt.plot([-counter_dash_width, counter_dash_width], [-i * max_quadrant_range, -i * max_quadrant_range], color='k') plt.plot([-i * max_quadrant_range, -i * max_quadrant_range], [-counter_dash_width, counter_dash_width], color='k') l.append(i * max_quadrant_range) l.append(-i * max_quadrant_range) zeros.append(0) zeros.append(0) build_cartesian_plane(10) plt.show() 

Ejemplo de salida del código