3 votes

afficher l'étiquette au survol d'une zone à portée verticale dans matplotlib

Lorsque je passe le curseur sur la région couverte, les étiquettes sont affichées uniquement sur les côtés de la région couverte, mais pas dans toute la région.

Je veux que l'étiquette soit affichée dans toute la zone lorsque je la survole. Comment puis-je mettre en œuvre cette logique ?

import matplotlib.pyplot as plt
import mplcursors

plt.axvspan(2,3,gid='yes',alpha=0.3,label = 'y')

mplcursors.cursor(hover=True).connect(
      "add", lambda sel: sel.annotation.set_text(sel.artist.get_label()))

plt.show()

3voto

ImportanceOfBeingErnest Points 119438

Je ne sais pas pourquoi. mplcursors ne fonctionne pas dans le code de la question ; mais voici comment afficher une annotation au survol d'un axe (sans mplcursors) :

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
span = ax.axvspan(2,3,gid='yes',alpha=0.3,label = 'y')

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

def hover(event):
    vis = annot.get_visible()
    if event.inaxes == ax:
        cont, ind = span.contains(event)
        if cont:
            annot.xy = (event.xdata, event.ydata)
            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()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X