Comment est-ordre des éléments dans matplotlib légende déterminé?
Je suis d'avoir à changer l'ordre des éléments dans une légende, lorsque je ne pense pas que je devrais avoir à le faire. J'ai essayer:
from pylab import *
clf()
ax=gca()
ht=ax.add_patch(Rectangle((1,1),1,1,color='r',label='Top',alpha=.01))
h1=ax.bar(1,2,label='Middle')
hb=ax.add_patch(Rectangle((1,1),1,1,color='k',label='Bottom',alpha=.01))
legend()
show()
et finissent avec des Bas-dessus du Milieu. Comment puis-je obtenir le bon ordre? N'est-il pas déterminé par l'ordre de création?
Mise à jour: ce qui suit peut être utilisée pour forcer l'ordre. Je pense que cela peut être la façon la plus simple de le faire, et qui semble maladroit. La question est de savoir ce qui détermine l'ordre d'origine?
hh=[ht,h1,hb]
legend([ht,h1.patches[0],hb],[H.get_label() for H in hh])
- Cela vous aide? matplotlib.org/users/...
- Merci. J'ai ajouté à la question d'un moyen de forcer l'ordre, mais c'est maladroit, et la question est de savoir comment rendre inutile (si possible). Je suppose que je dois accepter une réponse que l'ordre est sans-papiers / indéterminé, si c'est le cas.
Vous devez vous connecter pour publier un commentaire.
L'ordre est déterministe, mais une partie de la privé tripes, donc peut être changé à tout moment, voir le code ici (le
self.*
les éléments sont des listes des artistes qui y ont été ajoutés, d'où la poignée de la liste est d'abord triées par type, le deuxième par ordre d'ajout).Si vous voulez explicitement le contrôle de l'ordre des éléments dans votre légende puis assembler une liste des gestionnaires et des étiquettes comme vous l'avez fait dans votre montage.
Voici un petit extrait de code pour trier les entrées dans la légende. Il suppose que vous avez déjà ajoutés à vos éléments de l'intrigue avec une étiquette, par exemple, quelque chose comme
puis le principal bits:
C'est juste une simple adaptation du code répertoriés au http://matplotlib.org/users/legend_guide.html
Une légère variation sur certains autres aswers. La liste
order
doivent avoir la même longueur que le nombre d'éléments de la légende, et spécifie l'ordre de nouveau manuellement.order=[0,2,1]
signifie que la première étiquette "0" demeure le premier, "le premier tableau, sous"; la troisième étiquette "2" va à la deuxième position, "deuxième tableau, sous"; et ainsi de suite.La fonction suivante cherche la légende des poignées et des étiquettes, et des sortes ou partiellement sortes, selon une liste donnée (
order
):La fonction de la forme de mises à jour est en
cpblUtilities.mathgraph
à https://gitlab.com/cpbl/cpblUtilities/blob/master/mathgraph.pyCitations: Kevin (cette page) et Markus Jarderot (Comment supprimer les doublons d'une liste alors que le maintien de l'ordre?).