2010-01-12 19 views
153

Tengo un gráfico de diagrama de dispersión con un montón de coordenadas x, y aleatorias. Actualmente, el eje Y comienza en 0 y sube hasta el valor máximo. Me gustaría que el eje Y para empezar con el valor máximo y subir a 0.Reverse Y-Axis en PyPlot

points = [(10,5), (5,11), (24,13), (7,8)]  
x_arr = [] 
y_arr = [] 
for x,y in points: 
    x_arr.append(x) 
    y_arr.append(y) 
plt.scatter(x_arr,y_arr) 

Respuesta

332

Hay una nueva API que hace esto aún más simple.

plt.gca().invert_xaxis() 

y/o

plt.gca().invert_yaxis() 
+4

Creo que esta es la respuesta correcta actual. – heltonbiker

+0

Definitivamente es. –

+13

Tenga en cuenta que debe establecer los límites del eje * antes * de que invierta el eje; de ​​lo contrario, lo volverá a invertir. – TheBigH

9

Uso matplotlib.pyplot.axis()

axis([xmin, xmax, ymin, ymax])

Por lo que podría añadir algo como esto al final:

plt.axis([min(x_arr), max(x_arr), max(y_arr), 0]) 

Aunque es posible que desee relleno en cada extremo para que los puntos extremos no se asienten en el borde. respuesta

+0

Ojalá pudiera marcar los dos correctos. Gracias DisplacedAussie! – DarkAnt

26

DisplacedAussie 's es correcta, pero por lo general un método más corto es sólo para revertir el solo eje en cuestión:

plt.scatter(x_arr, y_arr) 
ax = plt.gca() 
ax.set_ylim(ax.get_ylim()[::-1]) 

donde la función gca() devuelve la instancia actual de los ejes y el [::-1] invierte la lista.

+2

Parece una mejor respuesta para mí. :) – DisplacedAussie

+4

'plt.ylim (plt.ylim() [:: - 1])' funcionó para mí. –

9

Si estás en ipython en pylab modo, entonces

plt.gca().invert_yaxis() 
show() 

la show() se requiere para hacer que actualizar la cifra actual.

3

Otro método similar a los descritos anteriormente es el uso de plt.ylim por ejemplo:

plt.ylim(max(y_array), min(y_array)) 

Este método funciona para mí cuando estoy tratando al compuesto múltiples conjuntos de datos en Y1 y/o Y2

1

Alternativamente , puede utilizar la función matplotlib.pyplot.axis(), que le permite invertir cualquiera de la trama eje

ax = matplotlib.pyplot.axis() 
matplotlib.pyplot.axis((ax[0],ax[1],ax[3],ax[2])) 

O si lo prefiere ONL y revertir el eje X, a continuación,

matplotlib.pyplot.axis((ax[1],ax[0],ax[2],ax[3])) 

De hecho, se pueden invertir los dos ejes:

matplotlib.pyplot.axis((ax[1],ax[0],ax[3],ax[2])) 
1

usando ylim() podría ser el mejor enfoque para su propósito:

xValues = list(range(10)) 
quads = [x** 2 for x in xValues] 
plt.ylim(max(quads), 0) 
plt.plot(xValues, quads) 

resultará: enter image description here