... | ... | @@ -18,6 +18,8 @@ Exemple [d'événements ](https://matplotlib.org/stable/users/event_handling.htm |
|
|
|
|
|
## Avec un "MouseEvent"
|
|
|
|
|
|
On travaille d'abord avec une figure ne comportant qu'une seule courbe.
|
|
|
|
|
|
### pour commencer, le "clic" écrit juste les coordonnées dans la console
|
|
|
|
|
|
```python
|
... | ... | @@ -43,11 +45,9 @@ Prenons un code \[proposé pour expliquer le principe\]([https://stackoverflow.c |
|
|
|-----------------|------------------------------|
|
|
|
| ![Figure initiale, 10points alignés](uploads/92107c1130854bb0ddea14c603a7fed8/Figure_10points_alignes.png) _ax.plot(range(10)), 10points alignés_ | ![Figure avec points supplémentaires](uploads/f7559a93cb64796ce97dca1714d8c0f3/Figure_on_ajoute_des_points.png) _Figure avec points supplémentaires définis à la souris_ |
|
|
|
|
|
|
On commence par une figure ne comportant qu'une seule courbe.
|
|
|
|
|
|
Pour manipuler, on va changer la fonction onclick, elle va maintenant ajouter (event.xdata, event.ydata) à la liste des points de la courbe, initialement dix points alignés.
|
|
|
|
|
|
Pour cela, il faut donner un nom à la courbe, ici donnees, et on récupère les valeurs en x avec donnees. get_xdata( ). Comme on récupère un numpy.array, il faut utiliser numpy.append pour concaténer le vecteur existant avec le nouveau point., et on le passe comme nouveau vercteur avec donnees.set_xdata(). On rafraîchit la courbe avec draw_idle.
|
|
|
Pour cela, il faut donner un nom à la courbe, ici donnees, et on récupère les valeurs en x avec donnees. get_xdata( ). Comme c'est un numpy.array, il faut utiliser numpy.append pour concaténer le vecteur existant avec le nouveau point., et on le passe comme nouveau vecteur avec donnees.set_xdata(). On rafraîchit la courbe avec draw_idle.
|
|
|
|
|
|
```python
|
|
|
import matplotlib.pyplot as plt
|
... | ... | @@ -69,7 +69,7 @@ plt.show() |
|
|
### le "clic" sélectionne le point le plus proche
|
|
|
|
|
|
Cette fois, on va calculer la distance du point à chacun des points de la courbe, et on va retenir l'indice de la distance minimale, qui nous servira à aller chercher les bonnes coordonnées dans x et y. Attention, il s'agit ici de la distance "en unités de la courbe", on verra dans l'exemple du picker qu'il vaut mieux travailler en distances "écran", en pixels, pour que le point sélectionné corresponde à l'impression visuelle.
|
|
|
Il restera à déplacer la courbe "sélection"; réduite à un point, aux coordonnées de ce point.
|
|
|
Il restera à déplacer la courbe "sélection",réduite à un point, aux coordonnées de ce point.
|
|
|
|
|
|
```python
|
|
|
def onclick_proche(event):
|
... | ... | @@ -88,7 +88,8 @@ fig.canvas.mpl_connect('button_press_event', onclick_proche) |
|
|
plt.show()
|
|
|
```
|
|
|
|
|
|
<img src="uploads/d108c419b577d18f8c8296a4c6c7f6a7/Figure_selection_point_proche.png" width='240'><i>Figure avec sélection du point le plus proche]>/i>
|
|
|
<img src="uploads/d108c419b577d18f8c8296a4c6c7f6a7/Figure_selection_point_proche.png" width='240'>
|
|
|
<i>Figure avec sélection du point le plus proche]</i>
|
|
|
|
|
|
## Avec un "PickEvent" :
|
|
|
|
... | ... | |