Ich benutze Matplotlib, um Streudiagramme zu erstellen. Jeder Punkt im Streudiagramm ist einem benannten Objekt zugeordnet. Ich möchte den Namen eines Objekts sehen können, wenn ich den Mauszeiger über den Punkt auf dem Streudiagramm bewege, der diesem Objekt zugeordnet ist. Insbesondere wäre es schön, schnell die Namen der Punkte sehen zu können, die Ausreißer sind. Das nächste, was ich bei der Suche hier finden konnte, ist der Befehl annotate, aber das scheint eine feste Beschriftung auf dem Plot zu erzeugen. Leider wäre bei der Anzahl der Punkte, die ich habe, das Streudiagramm nicht lesbar, wenn ich jeden Punkt beschriften würde. Kennt jemand eine Möglichkeit, Beschriftungen zu erstellen, die nur angezeigt werden, wenn sich der Cursor in der Nähe dieses Punkts befindet?
quelle
Antworten:
Es scheint, dass keine der anderen Antworten hier tatsächlich die Frage beantwortet. Hier ist also ein Code, der eine Streuung verwendet und beim Bewegen des Mauszeigers über die Streupunkte eine Anmerkung anzeigt .
Da diese Lösung auch für eine Linie
plot
anstelle einer Streuung verwendet werden soll, ist die folgende Lösung dieselbeplot
( für die etwas anders funktioniert).Code-Snippet anzeigen
Wenn jemand nach einer Lösung für Linien in zwei Achsen sucht, lesen Sie Informationen zum Anzeigen von Beschriftungen, wenn Sie mit der Maus über einen Punkt in mehreren Achsen fahren.
Falls jemand nach einer Lösung für Balkendiagramme sucht, lesen Sie bitte diese Antwort .
quelle
ind["ind"]
es sich tatsächlich um eine Liste von Indizes für alle Punkte unter dem Cursor handelt. Dies bedeutet, dass Sie mit dem obigen Code tatsächlich auf alle Punkte an einer bestimmten Position zugreifen können und nicht nur auf den obersten Punkt. Wenn Sie beispielsweise zwei überlappende Punkte haben, kann der Text gelesen werden,1 2, B C
oder selbst1 2 3, B C D
wenn Sie drei überlappende Punkte haben.0 8, A I
(siehe Bild ).fig.canvas.draw_idle()
viele Male aufgerufen (er ändert sogar den Cursor in den Leerlauf). Ich habe es gelöst, indem ich den vorherigen Index gespeichert und überprüft habe, obind["ind"][0] == prev_ind
. Aktualisieren Sie dann nur, wenn Sie von einem Punkt zum anderen wechseln (Text aktualisieren), das Schweben beenden (die Anmerkung unsichtbar machen) oder mit dem Schweben beginnen (Anmerkung sichtbar machen). Mit dieser Änderung ist es viel sauberer und effizienter.%matplotlib notebook
in einem IPython / Jupyter-Notebook.Diese Lösung funktioniert, wenn Sie den Mauszeiger über eine Linie bewegen, ohne darauf klicken zu müssen:
quelle
matplotlib
... zu tun ) - funktioniert das mitipython
/jupyter
notebooks? Funktioniert es auch, wenn mehrere Nebenhandlungen vorhanden sind? Was ist mit einem Balkendiagramm und nicht mit einem Liniendiagramm?Von http://matplotlib.sourceforge.net/examples/event_handling/pick_event_demo.html :
quelle
print
Anweisung sollte auch Parens für die Kompatibilität mit Python 3Eine leichte Bearbeitung an einem Beispiel in bereitgestellt http://matplotlib.org/users/shell.html :
Dies zeichnet eine gerade Linie, wie Sohaib fragte
quelle
mpld3 löse es für mich. BEARBEITEN (CODE HINZUGEFÜGT):
Sie können dieses Beispiel überprüfen
quelle
TypeError: array([1.]) is not JSON serializable
.mplcursors hat für mich gearbeitet. mplcursors bietet anklickbare Anmerkungen für matplotlib. Es ist stark von mpldatacursor ( https://github.com/joferkington/mpldatacursor ) mit einer stark vereinfachten API inspiriert
quelle
matplotlib
jede 10. Zeile hat die gleiche Farbe, so ein Schmerz.mplcursors
sortiert es aber aus.Die anderen Antworten entsprachen nicht meiner Notwendigkeit, QuickInfos in einer neueren Version der Jupyter-Inline-Matplotlib-Abbildung korrekt anzuzeigen. Dieser funktioniert aber:
Wenn Sie mit der Maus über einen Punkt fahren, führt dies zu folgendem Bild:
quelle
Wenn Sie ein Jupyter-Notebook verwenden, ist meine Lösung so einfach wie:
Sie können so etwas bekommen
quelle
Ich habe ein mehrzeiliges Anmerkungssystem erstellt, das hinzugefügt werden kann: https://stackoverflow.com/a/47166787/10302020 . Für die aktuellste Version: https://github.com/AidenBurgess/MultiAnnotationLineGraph
Ändern Sie einfach die Daten im unteren Bereich.
quelle