Oś Y w Pythonie Matplotlib zaznacza znaczniki po prawej stronie wykresu

112

Mam prosty wykres liniowy i muszę przesunąć znaczniki osi y z (domyślnej) lewej strony wykresu na prawą stronę. Jakieś przemyślenia, jak to zrobić?

Jason Strimpel
źródło

Odpowiedzi:

192

Posługiwać się ax.yaxis.tick_right()

na przykład:

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

wprowadź opis obrazu tutaj

joaquin
źródło
Świetna odpowiedź, dostaniesz +1, dałbym ci jeszcze jedno +1 za zdjęcie, ale jestem ograniczony tylko do 1.
lukecampbell
ciekawe, że to powoduje, że nazwy kleszczy wracają, mimo że powinny być tłumione przez sharey = True
endolith
A co, jeśli chcę zaznaczyć kleszcze i etykiety po lewej i prawej stronie?
AstroFloyd
1
Nie wyjaśniłem dlaczego, ale to się psuje, jeśli masz podploty z sharey=True.
Steven C. Howell
Jakie jest polecenie, aby zaznaczenia pojawiały się po lewej i po prawej stronie? Dzięki!
tommy.carstensen
99

Do odpowiednich etykiet użyj ax.yaxis.set_label_position("right"), tj .:

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
źródło
57

odpowiedź joaquina działa, ale ma efekt uboczny polegający na usunięciu kleszczy z lewej strony osi. Aby to naprawić, tick_right()zadzwoń pod numer set_ticks_position('both'). Poprawiony przykład:

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

Wynikiem jest wykres z zaznaczeniami po obu stronach, ale etykiety znaczników po prawej stronie.

wprowadź opis obrazu tutaj

Tom Baldwin
źródło
24

Na wypadek, gdyby ktoś zapytał (tak jak ja), jest to również możliwe, gdy używa się subplot2grid. Na przykład:

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

Pokaże to:

wprowadź opis obrazu tutaj

Titianne
źródło
4
Działa to ax.tick_params(axis='y', which='both', labelleft='off', labelright='on')również z. Ale to nie ruszaylabel
Eric
1
Cóż, zawsze możesz użyć, plt.gca()aby uzyskać bieżący obiekt osi. Dlatego użyjesz:plt.gca().yaxis.set_label_position("right")
sannaj