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ć?

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


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

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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.