Aggiunta di un'etichetta dell'asse y all'asse y secondario in matplotlib


119

Posso aggiungere un'etichetta all'asse y sinistro usando plt.ylabel, ma come posso aggiungerla all'asse y secondario?

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

Risposte:


234

Il modo migliore è interagire axesdirettamente con l' oggetto

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

grafico di esempio


Come ottenere l'asse y destro come quello sinistro, voglio dire, dal basso verso l'alto, da 0 a 5, allineato.
Sigur

Come ruotare il testo blu senza sovrapporre i segni di spunta?
Sigur

@Sigur devi pasticciare con il passaggio del parametro horizontalalignment e / o verticalalignment ad ax2.set_ylabel
Paul H

@PaulH, ho scoperto che possiamo ottenere i limiti y da ax1 e impostarli su ax2, quindi la posizione delle etichette sarà allineata.
Sigur

@Sigur Non seguo come i limiti degli assi e le zecche interagiscono con la rotazione delle etichette, ma se sei felice, godspeed
Paul H

22

Esiste una soluzione semplice senza scherzi con matplotlib: solo panda.

Modifica dell'esempio originale:

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

Fondamentalmente, quando l' secondary_y=Trueopzione è data (anche se ax=axviene passata anche) pandas.plotrestituisce un diverso asse che usiamo per impostare le etichette.

So che è stato risposto molto tempo fa, ma penso che questo approccio valga la pena.


Grazie - ottimo approccio! Tuttavia, vale la pena notare che questo funziona solo se si traccia prima sull'asse y primario, poi sull'asse y secondario, esattamente come hai fatto. Se cambi l'ordine, si comporta male.
user667489

7

Non ho accesso a Python in questo momento, ma dalla parte superiore della mia testa:

fig = plt.figure()

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

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.