Maison >développement back-end >Tutoriel Python >Comment ajouter des annotations de survol aux nuages ​​de points Matplotlib ?

Comment ajouter des annotations de survol aux nuages ​​de points Matplotlib ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-23 05:41:18947parcourir

How to Add Hovering Annotations to Matplotlib Scatter Plots?

Comment créer des annotations en survol dans un tracé

Lors de l'analyse de nuages ​​de points avec de nombreux points de données, l'identification de points d'intérêt spécifiques peut être difficile. Une solution pratique consiste à implémenter des annotations de survol qui affichent des informations supplémentaires lors du mouvement du curseur.

La bibliothèque matplotlib fournit une fonctionnalité polyvalente pour ajouter des annotations aux tracés. Pour créer des annotations de survol, nous pouvons utiliser les fonctions annotate et update_annot. La fonction annotate positionne une annotation à une coordonnée spécifiée, tandis que update_annot modifie son texte et son apparence en fonction de l'index du point de données survolé.

Pour obtenir des annotations survolées, suivez ces étapes :

  1. Importez les bibliothèques requises et générez vos données.
  2. Créez un nuage de points et une annotation invisible objet.
  3. Définissez la fonction update_annot pour mettre à jour le texte et l'apparence de l'annotation en fonction de l'index du point survolé.
  4. Implémentez la fonction de survol pour contrôler la visibilité de l'annotation en fonction du mouvement du curseur.
  5. Connectez le motion_notify_event à la fonction de survol.

En implémentant Avec cette approche, vous pouvez facilement ajouter des annotations de survol à vos nuages ​​de points, fournissant ainsi des informations précieuses sur des points de données spécifiques sans encombrer le tracé.

Exemple :

L'extrait de code fourni démontre l'implémentation d'annotations en survol sur un nuage de points :

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()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:MNIST dans PyTorchArticle suivant:MNIST dans PyTorch