Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mencipta Anotasi Berlegar untuk Plot Taburan dalam Matplotlib?

Bagaimana untuk Mencipta Anotasi Berlegar untuk Plot Taburan dalam Matplotlib?

DDD
Lepaskan: 2024-12-14 08:46:10
asal
332 orang telah melayarinya

How to Create Hovering Annotations for Scatter Plots in Matplotlib?

Cara Menambah Anotasi Berlegar pada Plot

Menganotasi titik pada plot berselerak ialah tugas biasa apabila bekerja dengan data. Matplotlib, perpustakaan Python untuk mencipta plot 2D, menyediakan kaedah mudah untuk menambah anotasi tetap pada plot menggunakan arahan anotasi. Walau bagaimanapun, pendekatan ini boleh menjadi tidak praktikal apabila berurusan dengan banyak titik data kerana plot mungkin menjadi berantakan.

Nasib baik, terdapat penyelesaian yang melibatkan penciptaan anotasi dinamik yang hanya muncul apabila kursor menuding pada titik data tertentu. Kaedah ini memerlukan sedikit pengubahsuaian fungsi anotasi bersama-sama dengan fungsi panggil balik untuk mengendalikan acara kursor.

Berikut ialah contoh kod yang menunjukkan pelaksanaan:

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()
Salin selepas log masuk

Kod ini menambah alatPetua yang muncul apabila tetikus melayang di atas titik data, memaparkan koordinat dan namanya. Fungsi update_annot mengemas kini kedudukan dan kandungan anotasi secara dinamik bergantung pada titik yang dilegar.

Pendekatan ini membolehkan visualisasi bebas kekacauan dengan maklumat yang mudah diakses tentang setiap titik data, menjadikannya sesuai untuk penerokaan data interaktif.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Anotasi Berlegar untuk Plot Taburan dalam Matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan