Dodanie etykiety osi y do pomocniczej osi y w matplotlib

119

Mogę dodać etykietę ay do lewej osi y za pomocą plt.ylabel, ale jak mogę dodać ją do pomocniczej osi y?

table = sql.read_frame(query,connection)

table[0].plot(color=colors[0],ylim=(0,100))
table[1].plot(secondary_y=True,color=colors[1])
plt.ylabel('$')
Osmond Bishop
źródło

Odpowiedzi:

232

Najlepszym sposobem jest bezpośrednia interakcja z axesobiektem

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 *y1

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
ax2.set_ylabel('Y2 data', color='b')

plt.show()

przykładowy wykres

Paul H.
źródło
Jak ustawić prawą oś y, taką jak lewą, to znaczy od dołu do góry, od 0 do 5, wyrównana.
Sigur
Jak obrócić niebieski tekst bez nakładania się znaczników?
Sigur
@Sigur, musisz zepsuć przekazanie parametru Horizontalalignment i / lub verticalalignment do ax2.set_ylabel
Paul H
@PaulH, odkryłem, że możemy uzyskać limity y z ax1 i ustawić je na ax2, więc pozycja etykiet zostanie wyrównana.
Sigur
@Sigur Nie śledzę, w jaki sposób limity osi i tiki oddziałują na rotację etykiet, ale jeśli jesteś szczęśliwy, godspeed
Paul H
22

Jest proste rozwiązanie bez mieszania się z matplotlib: tylko pandy.

Poprawianie oryginalnego przykładu:

table = sql.read_frame(query,connection)

ax = table[0].plot(color=colors[0],ylim=(0,100))
ax2 = table[1].plot(secondary_y=True,color=colors[1], ax=ax)

ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

Zasadniczo, gdy secondary_y=Trueopcja jest podana (nawet jeśli ax=axjest przekazywana) pandas.plotzwraca różne osie, których używamy do ustawiania etykiet.

Wiem, że odpowiedź na to pytanie udzielono dawno temu, ale myślę, że takie podejście jest tego warte.

kiril
źródło
Dzięki - świetne podejście! Warto jednak zauważyć, że działa to tylko wtedy, gdy wykreślasz najpierw na głównej osi Y, a następnie na dodatkowej osi Y, dokładnie tak, jak to zrobiłeś. Jeśli zmienisz kolejność, to źle się zachowuje.
user667489
7

Nie mam teraz dostępu do Pythona, ale od początku do końca:

fig = plt.figure()

axes1 = fig.add_subplot(111)
# set props for left y-axis here

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
Micke
źródło