Comment ajouter des annotations en survol à un tracé
Annoter des points sur un nuage de points est une tâche courante lorsque l'on travaille avec des données. Matplotlib, une bibliothèque Python permettant de créer des tracés 2D, fournit une méthode simple pour ajouter des annotations fixes à un tracé à l'aide de la commande annotate. Cependant, cette approche peut devenir peu pratique lorsqu'il s'agit de traiter de nombreux points de données, car le tracé pourrait devenir encombré.
Heureusement, il existe une solution qui consiste à créer des annotations dynamiques qui n'apparaissent que lorsque le curseur passe sur un point de données spécifique. Cette méthode nécessite une légère modification de la fonction annotate en conjonction avec une fonction de rappel pour gérer les événements du curseur.
Voici un exemple de code démontrant l'implémentation :
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 code ajoute une info-bulle qui apparaît lorsque la souris survole un point de données, affichant ses coordonnées et son nom. La fonction update_annot met à jour dynamiquement la position et le contenu de l'annotation en fonction du point survolé.
Cette approche permet une visualisation sans encombrement avec des informations facilement accessibles sur chaque point de données, ce qui la rend adaptée à l'exploration interactive des données.
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!