Heim > Backend-Entwicklung > Python-Tutorial > Wie erstelle ich schwebende Anmerkungen für Streudiagramme in Matplotlib?

Wie erstelle ich schwebende Anmerkungen für Streudiagramme in Matplotlib?

DDD
Freigeben: 2024-12-14 08:46:10
Original
324 Leute haben es durchsucht

How to Create Hovering Annotations for Scatter Plots in Matplotlib?

So fügen Sie schwebende Anmerkungen zu einem Diagramm hinzu

Das Kommentieren von Punkten in einem Streudiagramm ist eine häufige Aufgabe bei der Arbeit mit Daten. Matplotlib, eine Python-Bibliothek zum Erstellen von 2D-Plots, bietet eine einfache Methode zum Hinzufügen fester Anmerkungen zu einem Plot mithilfe des Befehls „annotate“. Dieser Ansatz kann sich jedoch bei der Bearbeitung zahlreicher Datenpunkte als unpraktisch erweisen, da die Darstellung möglicherweise unübersichtlich wird.

Glücklicherweise gibt es eine Lösung, bei der dynamische Anmerkungen erstellt werden, die nur angezeigt werden, wenn der Cursor über einem bestimmten Datenpunkt steht. Diese Methode erfordert eine geringfügige Änderung der Annotate-Funktion in Verbindung mit einer Callback-Funktion zur Verarbeitung von Cursorereignissen.

Hier ist ein Beispielcode, der die Implementierung demonstriert:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

x = np.random.rand(15)
y = np.random.rand(15)
names = np.array(list("ABCDEFGHIJKLMNO"))
c = np.random.randint(1, 5, size=15)

norm = plt.Normalize(1, 4)
cmap = plt.cm.RdYlGn

fig, ax = plt.subplots()
sc = plt.scatter(x, y, c=c, s=100, cmap=cmap, norm=norm)

annot = ax.annotate("", xy=(0, 0), xytext=(20, 20), textcoords="offset points",
                    bbox=dict(boxstyle="round", fc="w"),
                    arrowprops=dict(arrowstyle="->"))
annot.set_visible(False)

def update_annot(ind):
    pos = sc.get_offsets()[ind["ind"][0]]
    annot.xy = pos
    text = "{}, {}".format(" ".join(list(map(str, ind["ind"]))),
                           " ".join([names[n] for n in ind["ind"]]))
    annot.set_text(text)
    annot.get_bbox_patch().set_facecolor(cmap(norm(c[ind["ind"][0]])))
    annot.get_bbox_patch().set_alpha(0.4)

def hover(event):
    vis = annot.get_visible()
    if event.inaxes == ax:
        cont, ind = sc.contains(event)
        if cont:
            update_annot(ind)
            annot.set_visible(True)
            fig.canvas.draw_idle()
        else:
            if vis:
                annot.set_visible(False)
                fig.canvas.draw_idle()

fig.canvas.mpl_connect("motion_notify_event", hover)

plt.show()
Nach dem Login kopieren

Dieser Code fügt einen ToolTip hinzu erscheint, wenn die Maus über einen Datenpunkt fährt, und zeigt seine Koordinaten und seinen Namen an. Die update_annot-Funktion aktualisiert dynamisch die Position und den Inhalt der Anmerkung abhängig vom schwebenden Punkt.

Dieser Ansatz ermöglicht eine übersichtliche Visualisierung mit leicht zugänglichen Informationen zu jedem Datenpunkt und eignet sich somit für die interaktive Datenexploration.

Das obige ist der detaillierte Inhalt vonWie erstelle ich schwebende Anmerkungen für Streudiagramme in Matplotlib?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage