Bonjour,
je cherche à permettre des hover event sur un graph matplotlib.
j'ai trouvé une solution ci dessous qui marche bien:
dans l'exemple ci dessus "event" et "ax" correspondent respectivement à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import matplotlib.pyplot as plt import numpy as np; np.random.seed(1) x = np.random.rand(15) y = np.random.rand(15) fig, ax = plt.subplots() sc = plt.scatter(x, y, s = 200) def hover(event): if event.inaxes == ax: cont, ind = sc.contains(event) if cont: print("OK") else: print("KO") fig.canvas.mpl_connect("motion_notify_event", hover) plt.show()
motion_notify_event: xy=(1, 244) xydata=(None, None) button=None dblclick=False inaxes=None
AxesSubplot(0.125,0.11;0.775x0.77)
Lorsque j'essaie d'appliquer cette méthode en embarquant le graphique dans un Widget, je n'arrive pas à faire passer (ou récupérer) certains paramètres... et ça me bloque... j'arrive pas à trouver un moyen d'embarquer la solution ci dessus! dans l'exemple ci dessous, "figure_7" et "graphique_7" appartiennent à une classe QWidget donc la méthode hover appartient elle aussi à cette même classe:
Dans cet exemple, l'appel du mpl_connect ne semble pas accepter de paramètre lié à la méthode hover. ça m'arrangerait de pouvoir faire passer mon graphique_7! mais même quand je bascule dans ma classe avec "self.graphqiue_7" dans mon __init__ et dans ma methode... ça marche pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 from matplotlib.backends.backend_qt5agg import (FigureCanvas, NavigationToolbar2QT as NavigationToolbar) from matplotlib.figure import Figure figure_7 = FigureCanvas(Figure()) graphique_7 = figure_7.figure.subplots(nrows=1, ncols=1) try: graphique_7.scatter([1,2,3,4,5,6,7,8,9], [5,4,7,8,9,3,2,1,6]) figure_7.figure.canvas.mpl_connect("motion_notify_event", self.hover) except: print("hover failed") def hover(arg1, arg2): print(arg1) print(arg2) try: #???? except: print("ko")
Contrairement au premier exemple du message je n'ai pas 1 paramètre "event" de récupéré dans ma méthode mais deux (dont le event qui correcpond à arg2)... j'ai essayé de vérifier les types de chacun de mes objets pour ne pas me tromper d'appel mais je n'arrive pas à communiquer "normalement" avec la méthode appelé via le mpl_connect.
des idées?
merci
Partager