Python Matplotlib Y-Axis ticks sur le côté droit du tracé

112

J'ai un tracé linéaire simple et j'ai besoin de déplacer les graduations de l'axe y du côté gauche (par défaut) du tracé vers le côté droit. Des idées sur la façon de faire cela?

Jason Strimpel
la source

Réponses:

192

Utilisation ax.yaxis.tick_right()

par exemple:

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()

entrez la description de l'image ici

Joaquin
la source
Excellente réponse, vous obtenez un +1, je vous donnerais un autre +1 pour la photo mais je suis limité à seulement 1.
lukecampbell
intéressant que cela provoque le retour des noms de tiques même s'ils devraient être supprimés par sharey = True
endolith
Et si je veux les graduations et les étiquettes à gauche et à droite?
AstroFloyd
1
Je n'ai pas expliqué pourquoi, mais cela casse si vous avez des sous-parcelles avec sharey=True.
Steven C. Howell
Quelle est la commande pour faire apparaître les coches à gauche et à droite? Merci!
tommy.carstensen
99

Pour une bonne utilisation des étiquettes ax.yaxis.set_label_position("right"), c'est-à-dire:

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
la source
57

La réponse de joaquin fonctionne, mais a pour effet secondaire de supprimer les tiques du côté gauche des axes. Pour résoudre ce problème, faites tick_right()un appel à set_ticks_position('both'). Un exemple révisé:

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()

Le résultat est un tracé avec des graduations des deux côtés, mais des étiquettes de coche à droite.

entrez la description de l'image ici

Tom Baldwin
la source
24

Au cas où quelqu'un le demande (comme je l'ai fait), cela est également possible lorsque l'on utilise subplot2grid. Par exemple:

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()

Cela montrera ceci:

entrez la description de l'image ici

Titianne
la source
4
Cela fonctionne également avec ax.tick_params(axis='y', which='both', labelleft='off', labelright='on'). Mais ça ne bouge pas leylabel
Eric
1
Eh bien, vous pouvez toujours utiliser plt.gca()pour obtenir l'objet axes actuel. Par conséquent, vous utiliseriez:plt.gca().yaxis.set_label_position("right")
sannaj