Marcas de Python Matplotlib Y-Axis en el lado derecho de la gráfica

112

Tengo un diagrama de línea simple y necesito mover las marcas del eje y desde el lado izquierdo (predeterminado) del diagrama al lado derecho. ¿Alguna idea sobre cómo hacer esto?

Jason Strimpel
fuente

Respuestas:

192

Utilizar ax.yaxis.tick_right()

por ejemplo:

from matplotlib import pyplot as plt

f = plt.figure()
ax = f.add_subplot(111)
ax.yaxis.tick_right()
plt.plot([2,3,4,5])
plt.show()

ingrese la descripción de la imagen aquí

Joaquín
fuente
Excelente respuesta, obtienes un +1, te daría otro +1 por la imagen, pero estoy limitado a solo 1.
lukecampbell
Es interesante que esto haga que los nombres de las garrapatas vuelvan a aparecer aunque deberían ser suprimidos por sharey = True
endolith
¿Y qué pasa si quiero las marcas y las etiquetas tanto a la izquierda como a la derecha?
AstroFloyd
1
No resolví por qué, pero esto se rompe si tiene subtramas con sharey=True.
Steven C. Howell
¿Cuál es el comando para hacer que las marcas aparezcan a la izquierda y a la derecha? ¡Gracias!
tommy.carstensen
99

Para el uso de etiquetas correctas ax.yaxis.set_label_position("right"), es decir:

f = plt.figure()
ax = f.add_subplot(111)
ax.yaxis.tick_right()
ax.yaxis.set_label_position("right")
plt.plot([2,3,4,5])
ax.set_xlabel("$x$ /mm")
ax.set_ylabel("$y$ /mm")
plt.show()
Dietrich
fuente
57

La respuesta de Joaquin funciona, pero tiene el efecto secundario de eliminar las marcas del lado izquierdo de los ejes. Para solucionar este problema, tick_right()llame a set_ticks_position('both'). Un ejemplo revisado:

from matplotlib import pyplot as plt

f = plt.figure()
ax = f.add_subplot(111)
ax.yaxis.tick_right()
ax.yaxis.set_ticks_position('both')
plt.plot([2,3,4,5])
plt.show()

El resultado es un gráfico con marcas en ambos lados, pero etiquetas con marcas a la derecha.

ingrese la descripción de la imagen aquí

Tom Baldwin
fuente
24

Solo en caso de que alguien pregunte (como hice yo), esto también es posible cuando se usa subplot2grid. Por ejemplo:

import matplotlib.pyplot as plt
plt.subplot2grid((3,2), (0,1), rowspan=3)
plt.plot([2,3,4,5])
plt.tick_params(axis='y', which='both', labelleft='off', labelright='on')
plt.show()

Mostrará esto:

ingrese la descripción de la imagen aquí

Titianne
fuente
4
Esto también funciona con ax.tick_params(axis='y', which='both', labelleft='off', labelright='on'). Pero no se mueve elylabel
Eric
1
Bueno, siempre puedes usar plt.gca()para obtener el objeto de ejes actual. Por lo tanto, usaría:plt.gca().yaxis.set_label_position("right")
sannaj