Eje Y inverso en PyPlot


266

Tengo un gráfico de diagrama de dispersión con un montón de coordenadas aleatorias x, y. Actualmente, el eje Y comienza en 0 y sube al valor máximo. Me gustaría que el eje Y comience en el valor máximo y suba a 0.

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)

Respuestas:


557

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

plt.gca().invert_xaxis()

y / o

plt.gca().invert_yaxis()

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

55

La respuesta de DisplacedAussie es correcta, pero generalmente un método más corto es solo para invertir el eje único en cuestión:

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

donde la gca()función devuelve la instancia actual de Axes y [::-1]revierte la lista.


3
Esa parece una mejor respuesta para mí. :)
DisplacedAussie

18

Utilice matplotlib.pyplot.axis ()

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

Entonces podría agregar 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.


Esto tiene una ventaja sobre las dos primeras respuestas, ya que corrige la orientación, no la voltea cada vez (lo cual es un problema si necesita llamarlo en un bucle).
Bas Swinckels

16

Si estás en ipython en pylabmodo, entonces

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

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


9

También podría usar la función expuesta por el objeto de ejes del diagrama de dispersión

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()

8

Otro método similar a los descritos anteriormente es usar, plt.ylimpor ejemplo:

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

Este método funciona para mí cuando intento componer múltiples conjuntos de datos en Y1 y / o Y2


3

El uso de 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á:ingrese la descripción de la imagen aquí


2

Alternativamente, puede usar la función matplotlib.pyplot.axis () , que le permite invertir cualquiera de los ejes del diagrama

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

O si prefiere invertir solo el eje X, entonces

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

De hecho, puede invertir ambos ejes:

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

0

Si usa matplotlib puede probar: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Estas dos líneas establecen los límites de los ejes x e y respectivamente. Para el eje x, el primer argumento l establece el valor más a la izquierda, y el segundo argumento r establece el valor más a la derecha. Para el eje y, el primer argumento b establece el valor más bajo, y el segundo argumento t establece el valor más alto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.