Ajout d'une étiquette d'axe y à l'axe y secondaire dans matplotlib


119

Je peux ajouter une étiquette ay à l'axe y gauche en utilisant plt.ylabel, mais comment puis-je l'ajouter à l'axe y secondaire?

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

Réponses:


235

Le meilleur moyen est d'interagir axesdirectement avec l' objet

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

exemple de graphique


Comment obtenir l'axe y droit comme celui de gauche, je veux dire, de bas en haut, de 0 à 5, aligné.
Sigur

Comment faire pivoter le texte bleu sans chevaucher les tiques?
Sigur

@Sigur vous devez jouer avec le passage du paramètre horizontalalignment et / ou verticalalignment à ax2.set_ylabel
Paul H

@PaulH, j'ai trouvé que nous pouvons obtenir les limites y de ax1 et les configurer sur ax2, de sorte que la position des étiquettes sera alignée.
Sigur

@Sigur Je ne suis pas la façon dont les limites des axes et les graduations interagissent avec la rotation des étiquettes, mais si vous êtes heureux, bonne chance
Paul H

22

Il existe une solution simple sans jouer avec matplotlib: juste des pandas.

Modification de l'exemple d'origine:

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

Fondamentalement, lorsque l' secondary_y=Trueoption est donnée (eventhough ax=axest également passé) pandas.plotrenvoie un axe différent que nous utilisons pour définir les étiquettes.

Je sais que cela a été répondu il y a longtemps, mais je pense que cette approche en vaut la peine.


Merci - excellente approche! Cependant, il convient de noter que cela ne fonctionne que si vous tracez d'abord sur l'axe y principal, puis sur l'axe y secondaire, exactement comme vous l'avez fait. Si vous changez la commande, elle se comporte mal.
user667489

7

Je n'ai pas accès à Python pour le moment, mais par cœur:

fig = plt.figure()

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

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.