J'ai un tracé avec deux axes y, en utilisant twinx()
. Je donne également des étiquettes aux lignes, et legend()
je veux les montrer avec , mais je ne réussis qu'à obtenir les étiquettes d'un axe dans la légende:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('mathtext', default='regular')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(time, Swdown, '-', label = 'Swdown')
ax.plot(time, Rn, '-', label = 'Rn')
ax2 = ax.twinx()
ax2.plot(time, temp, '-r', label = 'temp')
ax.legend(loc=0)
ax.grid()
ax.set_xlabel("Time (h)")
ax.set_ylabel(r"Radiation ($MJ\,m^{-2}\,d^{-1}$)")
ax2.set_ylabel(r"Temperature ($^\circ$C)")
ax2.set_ylim(0, 35)
ax.set_ylim(-20,100)
plt.show()
Je ne reçois donc que les étiquettes du premier axe dans la légende, et non l'étiquette «temp» du deuxième axe. Comment pourrais-je ajouter cette troisième étiquette à la légende?
python
matplotlib
axis
legend
joris
la source
la source
ax
avec le style que j'utilise surax2
: dans votre casax.plot([], [], '-r', label = 'temp')
,. C'est beaucoup plus rapide et plus simple que de le faire correctement ...Réponses:
Vous pouvez facilement ajouter une deuxième légende en ajoutant la ligne:
Vous obtiendrez ceci:
Mais si vous voulez toutes les étiquettes sur une légende, vous devriez faire quelque chose comme ceci:
Ce qui vous donnera ceci:
la source
errorbar
parcelles. Pour une solution qui les gère correctement, voir ci-dessous: stackoverflow.com/a/10129461/1319447ax1
. Dans ce cas, utilisezlns1=ax1.lines
puis ajoutezlns2
à cette liste.loc
sont expliquées iciJe ne sais pas si cette fonctionnalité est nouvelle, mais vous pouvez également utiliser la méthode get_legend_handles_labels () plutôt que de suivre vous-même les lignes et les étiquettes:
la source
errorbar
tracés, tandis que celui accepté échoue (montrant une ligne et ses barres d'erreur séparément, et aucun d'entre eux avec la bonne étiquette). De plus, c'est plus simple.ax2
et il n'y en a pas de set depuis le débutÀ partir de la version 2.1 de matplotlib, vous pouvez utiliser une légende de figure . Au lieu de
ax.legend()
, ce qui produit une légende avec les poignées des axesax
, on peut créer une légende de figurequi rassemblera toutes les poignées de toutes les sous-parcelles de la figure. Puisqu'il s'agit d'une légende de figure, elle sera placée au coin de la figure et l'
loc
argument est relatif à la figure.Afin de replacer la légende dans les axes, on fournirait a
bbox_to_anchor
et abbox_transform
. Ce dernier serait la transformation des axes des axes dans lesquels la légende devrait résider. Le premier peut être les coordonnées de l'arête définies par lesloc
coordonnées des axes.la source
conda upgrade matplotlib
aucune nouvelle version trouvée, j'utilise toujours la v.2.0.2Vous pouvez facilement obtenir ce que vous voulez en ajoutant la ligne dans ax:
ou
Cela ne représenterait rien mais ajouterait une étiquette à la légende de la hache.
Je pense que c'est un moyen beaucoup plus simple. Il n'est pas nécessaire de suivre les lignes automatiquement lorsque vous n'avez que quelques lignes dans les seconds axes, car la fixation à la main comme ci-dessus serait assez facile. Quoi qu'il en soit, cela dépend de ce dont vous avez besoin.
Le code entier est comme ci-dessous:
L'intrigue est comme ci-dessous:
Mise à jour: ajoutez une meilleure version:
Cela ne fera rien tandis que
plot(0, 0)
peut changer la plage d'axe.Un exemple supplémentaire pour scatter
la source
Un hack rapide qui peut répondre à vos besoins ..
Retirez le cadre de la boîte et placez manuellement les deux légendes l'une à côté de l'autre. Quelque chose comme ça..
Où le tuple de localisation correspond aux pourcentages de gauche à droite et de bas en haut qui représentent l'emplacement dans le graphique.
la source
J'ai trouvé un exemple matplotlib officiel suivant qui utilise host_subplot pour afficher plusieurs axes y et toutes les différentes étiquettes dans une légende. Aucune solution de contournement nécessaire. La meilleure solution que j'ai trouvée jusqu'à présent. http://matplotlib.org/examples/axes_grid/demo_parasite_axes2.html
la source