etiqueta del eje y de matplotlib en el lado derecho


81

¿Existe una forma sencilla de poner la etiqueta del eje y en el lado derecho del gráfico? Sé que esto se puede hacer para las etiquetas de tick usando ax.yaxis.tick_right(), pero me gustaría saber si también se puede hacer para la etiqueta del eje.

Una idea que me vino a la mente fue utilizar

ax.yaxis.tick_right()
ax2 = ax.twinx()
ax2.set_ylabel('foo')

Sin embargo, esto no tiene el efecto deseado de colocar todas las etiquetas (etiquetas de marca y eje) en el lado derecho, mientras se conserva la extensión del eje y. En resumen, me gustaría una forma de mover todas las etiquetas del eje y de izquierda a derecha.

Respuestas:


136

Parece que puedes hacerlo con:

ax.yaxis.set_label_position("right")
ax.yaxis.tick_right()

Vea aquí un ejemplo.


1
si intenta colocar las etiquetas dentro / en el área de plota, vea esto: stackoverflow.com/a/47874059/4933053
qrtLs

Funciona solo para la leyenda, no las figuras del eje. ¿Tienes una idea para solucionar este problema?
Agape Gal'lo

¿Hay un solo comando que haga ambas cosas en Matplotlib o es simplemente innecesariamente detallado?
ifly6

@ ifly6 No estoy seguro de si hay uno incorporado, hago esto:rhs = lambda ax: (ax.yaxis.set_label_position("right"), ax.yaxis.tick_right())
Aaron

16

Si desea seguir el ejemplo dado en matplotliby crear una figura con etiquetas en ambos lados de los ejes pero sin tener que usar la subplots()función, aquí está mi solución:

from matplotlib import pyplot as plt
import numpy as np

ax1 = plt.plot()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
plt.plot(t,s1,'b-')
plt.xlabel('t (s)')
plt.ylabel('exp',color='b')

ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
plt.ylabel('sin', color='r')
plt.show()


1
Esto no funciona para mí: File "prueba.py", line 11, in <module> ax2 = ax1.twinx() AttributeError: 'list' object has no attribute 'twinx'
Javier García

4
prueba plt.gca (). twinx ()
Arne Babenhauserheide

tryax1 = plt.subplot()
shoegazerstella

2

(perdón por resucitar la pregunta)

Sé que es un truco sucio, pero si no quiere pasar al manejo de ejes y permanecer en los pltcomandos, puede usar el labelpadargumento escalar para colocar su etiqueta a la derecha del lado del gráfico. Funciona después de un poco de prueba y error, y el valor escalar exacto posiblemente (?) Tenga que ver con las dimensiones del tamaño de su figura.

Ejemplo:

# move ticks
plt.tick_params(axis='y', which='both', labelleft=False, labelright=True)

# move label
plt.ylabel('Your label here', labelpad=-725, fontsize=18)

1

Las respuestas anteriores están desactualizadas. Aquí está el código más reciente para el ejemplo anterior:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

De aqui .

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.