Nuage de points de Matplotlib avec légende
Je veux créer un Matplotlib un nuage de points, avec une légende indiquant la couleur de chaque classe. Par exemple, j'ai une liste de x
et y
valeurs, et une liste de classes
valeurs. Chaque élément de la x
y
et classes
listes correspond à un point dans l'intrigue. Je veux que chaque classe d'avoir sa propre couleur, j'en ai déjà codé, mais je veux les classes à être affiché dans une légende. Quels paramètres dois-je passer à la legend()
fonction pour y parvenir?
Voici mon code pour l'instant:
x = [1, 3, 4, 6, 7, 9]
y = [0, 0, 5, 8, 8, 8]
classes = ['A', 'A', 'B', 'C', 'C', 'C']
colours = ['r', 'r', 'b', 'g', 'g', 'g']
plt.scatter(x, y, c=colours)
source d'informationauteur Karnivaurus
Vous devez vous connecter pour publier un commentaire.
D'abord, j'ai le sentiment que vous vouliez utiliser des apostrophes, pas backticks lors de la déclaration de couleurs.
Pour une légende vous avez besoin de certaines formes comme les classes. Par exemple, le code suivant crée une liste de rectangles appelés
recs
pour chaque couleur dansclass_colours
.Vous pouvez utiliser les cercles aussi, si vous le souhaitez, il suffit de cocher la
matplotlib.patches
de la documentation. Il y a une deuxième façon de créer une légende, dans laquelle vous indiquez le "Label" pour un ensemble de points en utilisant un éparpillement de commande pour chaque jeu. Un exemple est donné ci-dessous.La première méthode est la méthode que j'ai personnellement utilisé, la seconde je l'ai trouvé en regardant les matplotlib de la documentation. Depuis les légendes ont été couvrant les points de données, j'ai déménagé, et les emplacements pour les légendes peuvent être trouvés ici. Si il y a une autre façon de faire une légende, je n'étais pas capable de le trouver après quelques recherches rapides dans les docs.
Il y a deux façons de le faire. L'un d'eux vous donne les entrées de légende pour chaque chose vous intrigue, et l'autre permet de mettre ce que vous voulez dans la légende, voler fortement de cette réponse.
Voici le premier moyen:
La
ax.legend()
fonction a plus d'un usage, le premier crée la légende sur la base des lignes dansaxes
objet, le second allwos vous pour contrôler les entrées manuellement, et est décrit ici.En gros, vous avez besoin pour donner à la légende de la ligne de poignées, et les labels associés.
L'autre vous permet de mettre ce que vous voulez dans la légende, par la création de la
Artist
les objets et les étiquettes, et de les transmettre à laax.legend()
fonction. Vous pouvez soit l'utiliser pour seulement certains de vos lignes dans la légende, ou vous pouvez l'utiliser pour mettre ce que vous voulez dans la légende.Ou ici, nous créons de nouvelles
Line2D
objets, et de leur donner la légende.J'ai aussi essayé d'obtenir de la méthode à l'aide de
patches
de travailler, sur le matplotlib légende page du guide, mais il n'a pas l'air de fonctionner donc j'ai renoncé.Dans mon projet,j'ai aussi envie de créer un vide d'éparpillement de la légende.Voici ma solution:
Prendre soin de "label","scatterpoints"ci-dessus.