J'utilise matplotlib pour créer des nuages de points. Chaque point du nuage de points est associé à un objet nommé. J'aimerais pouvoir voir le nom d'un objet lorsque je place mon curseur sur le point du nuage de points associé à cet objet. En particulier, ce serait bien de pouvoir voir rapidement les noms des points qui sont des valeurs aberrantes. La chose la plus proche que j'ai pu trouver en cherchant ici est la commande annoter, mais cela semble créer une étiquette fixe sur le tracé. Malheureusement, avec le nombre de points que j'ai, le nuage de points serait illisible si j'étiquais chaque point. Quelqu'un connaît-il un moyen de créer des étiquettes qui n'apparaissent que lorsque le curseur survole à proximité de ce point?
python
matplotlib
jdmcbr
la source
la source
Réponses:
Il semble qu'aucune des autres réponses ici ne réponde réellement à la question. Donc , est un code ici qui utilise une dispersion et montre une annotation sur planant au- dessus des points de dispersion.
Parce que les gens veulent également utiliser cette solution pour une ligne
plot
au lieu d'un nuage de points, ce qui suit serait la même solution pourplot
(ce qui fonctionne légèrement différemment).Afficher l'extrait de code
Dans le cas où quelqu'un recherche une solution pour les lignes dans des axes doubles, reportez-vous à Comment faire apparaître des étiquettes lors du survol d'un point dans plusieurs axes?
Dans le cas où quelqu'un cherche une solution pour les graphiques à barres, veuillez vous référer par exemple à cette réponse .
la source
ind["ind"]
est en fait une liste des index pour tous les points sous le curseur. Cela signifie que le code ci-dessus vous donne en fait accès à tous les points à une position donnée, et pas seulement au point le plus haut. Par exemple, si vous avez deux points qui se chevauchent, le texte pourrait lire1 2, B C
ou même1 2 3, B C D
si vous aviez 3 points qui se chevauchent.0 8, A I
(voir image ).fig.canvas.draw_idle()
plusieurs fois (il change même le curseur en inactif). Je l'ai résolu en stockant l'index précédent et en vérifiant siind["ind"][0] == prev_ind
. Ensuite, ne mettez à jour que si vous vous déplacez d'un point à un autre (mettez à jour le texte), arrêtez le survol (rendez l'annotation invisible) ou commencez le survol (rendez l'annotation visible). Avec ce changement, c'est beaucoup plus propre et efficace.%matplotlib notebook
dans un notebook IPython / Jupyter.Cette solution fonctionne lors du survol d'une ligne sans qu'il soit nécessaire de cliquer dessus:
la source
matplotlib
...) - est-ce que cela fonctionne avecipython
/jupyter
notebooks? Cela fonctionne-t-il également lorsqu'il y a plusieurs sous-parcelles? Qu'en est-il sur un graphique à barres plutôt qu'un graphique linéaire?Depuis http://matplotlib.sourceforge.net/examples/event_handling/pick_event_demo.html :
la source
print
instruction devrait également utiliser des parens pour la compatibilité avec python 3Une légère modification sur un exemple fourni dans http://matplotlib.org/users/shell.html :
Cela trace un tracé en ligne droite, comme Sohaib le demandait
la source
mpld3 résout-le pour moi. MODIFIER (CODE AJOUTÉ):
Vous pouvez consulter cet exemple
la source
TypeError: array([1.]) is not JSON serializable
.mplcursors a travaillé pour moi. mplcursors fournit une annotation cliquable pour matplotlib. Il est fortement inspiré de mpldatacursor ( https://github.com/joferkington/mpldatacursor ), avec une API très simplifiée
la source
matplotlib
donne à chaque ligne 10 la même couleur, une telle douleur.mplcursors
le trie cependant.Les autres réponses ne répondaient pas à mon besoin d'afficher correctement les info-bulles dans une version récente de la figure matplotlib en ligne de Jupyter. Celui-ci fonctionne cependant:
Menant à quelque chose comme l'image suivante en passant sur un point avec la souris:
la source
Si vous utilisez un notebook jupyter, ma solution est aussi simple que:
Vous pouvez obtenir quelque chose comme
la source
J'ai créé un système d'annotation multiligne à ajouter à: https://stackoverflow.com/a/47166787/10302020 . pour la version la plus récente: https://github.com/AidenBurgess/MultiAnnotationLineGraph
Modifiez simplement les données dans la section inférieure.
la source