... | @@ -96,27 +96,22 @@ fig.canvas.mpl_connect('button_press_event', onclick_proche) |
... | @@ -96,27 +96,22 @@ fig.canvas.mpl_connect('button_press_event', onclick_proche) |
|
plt.show()
|
|
plt.show()
|
|
```
|
|
```
|
|
|
|
|
|
Le code "fait le travail", vous pouvez tester et essayer avec d'autres jeux de données.
|
|
Le code "fait le travail", vous pouvez tester et essayer avec d'autres jeux de données. Vous pourrez trouver des données pour lesquelles le calcul des distances proposé ici n'est pas satisfaisant car il n'identifie pas le point le plus proche "visuellement" : il est donc préférable de raisonner en unités "écran", ce qu'on fera dans la suite.
|
|
Vous pourrez trouver des données pour lesquelles le calcul des distances proposé ici n'est pas satisfaisant car il n'identifie pas le point le plus proche "visuellement" : il est donc préférable de raisonner en unités "écran", ce qu'on fera dans la suite.
|
|
| code ci-dessus | code ci-dessous, avec plusieurs courbes |
|
|
|
|
|----------------|-----------------------------------------|
|
|
|
|
|
|
| code ci-dessus | code ci-dessous, avec plusieurs courbes|
|
|
|
|
|-----------------|------------------------------|
|
|
|
|
| ![Figure initiale, 10points alignés](uploads/467300d845b9a2e75b1b8ecca19328d8/selection_point_mouseclick.png) | ![selection_point_mouseclick_2courbes](uploads/5e59b3773c9d83f464047deb72e4d5ff/selection_point_mouseclick_2courbes.png) |
|
|
| ![Figure initiale, 10points alignés](uploads/467300d845b9a2e75b1b8ecca19328d8/selection_point_mouseclick.png) | ![selection_point_mouseclick_2courbes](uploads/5e59b3773c9d83f464047deb72e4d5ff/selection_point_mouseclick_2courbes.png) |
|
|
|<i> une étoile rouge matérialise le point identifié comme le plus proche du clic de souris </i>|<i>résultats en distance "unités écran", pour 2 courbes</i>|
|
|
| _une étoile rouge matérialise le point identifié comme le plus proche du clic de souris_ | _résultats en distance "unités écran", pour 2 courbes_ |
|
|
|
|
|
|
|
|
|
|
### Avec une figure comportant 2 courbes ou plus.
|
|
### Avec une figure comportant 2 courbes ou plus.
|
|
|
|
|
|
Dans ce nouveau code, on va introduire deux difficultés (toutes relatives !):
|
|
Dans ce nouveau code, on va introduire deux difficultés (toutes relatives !):
|
|
- calculer la **distance aux points en "coordonnées écran"**, en normant les composantes de la distance par la largeur et la hauteur respectivement en coordonnées données, puis en dénormant par les largeur et la hauteur respectivement en "unité écran" (pixels ou unités proportionnelles). On donne la possibilité de passer d'une distance à l'autre en passant à l'argument ratio_w_sur_h soit le ratio w/h de la vignette ce qui conduira à un calcul en distances "écran", soit rien, ce qui conduira à un calcul en distances "données"
|
|
|
|
- répéter l'opération pour 2 courbes (ou plus) : le minimum de chacune est repérée par un carré et une annotation ; le plus proche des deux est repéré par une étoile inratable.
|
|
|
|
|
|
|
|
|
|
* calculer la **distance aux points en "coordonnées écran"**, en normant les composantes de la distance par la largeur et la hauteur respectivement en coordonnées données, puis en dénormant par les largeur et la hauteur respectivement en "unité écran" (pixels ou unités proportionnelles). On donne la possibilité de passer d'une distance à l'autre en passant à l'argument ratio_w_sur_h soit le ratio w/h de la vignette ce qui conduira à un calcul en distances "écran", soit rien, ce qui conduira à un calcul en distances "données"
|
|
|
|
* répéter l'opération pour 2 courbes (ou plus) : le minimum de chacune est repérée par un carré et une annotation ; le plus proche des deux est repéré par une étoile inratable.
|
|
|
|
|
|
On a "factorisé" le code en définissant dans la fonction onclick_proche_2courbes une sous-fonction qui fera l'opération sur une courbe, son annotation associée et son "carré" fluo associé.
|
|
On a "factorisé" le code en définissant dans la fonction onclick_proche_2courbes une sous-fonction qui fera l'opération sur une courbe, son annotation associée et son "carré" fluo associé.
|
|
|
|
|
|
|
|
```python
|
|
``` python
|
|
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
import numpy as np
|
|
|
|
|
... | @@ -222,13 +217,11 @@ adnotacja_ecran_2.set_visible(False) |
... | @@ -222,13 +217,11 @@ adnotacja_ecran_2.set_visible(False) |
|
|
|
|
|
fig.canvas.mpl_connect('button_press_event', onclick_proche_2courbes)
|
|
fig.canvas.mpl_connect('button_press_event', onclick_proche_2courbes)
|
|
plt.show()
|
|
plt.show()
|
|
|
|
|
|
```
|
|
```
|
|
|
|
|
|
## Avec un "PickEvent" :
|
|
## Avec un "PickEvent" :
|
|
|
|
|
|
La méthode précédente fonctionne, mais elle a l'inconvénient de faire des calculs sur l'ensemble des points de la courbe. On va utiliser la notion de _picker_, toujours sur une figure ne comportant qu'une seule courbe, afin de réaliser une **présélection**.
|
|
La méthode précédente fonctionne, mais elle a l'inconvénient de faire des calculs sur l'ensemble des points de la courbe. On va utiliser la notion de _picker_, toujours sur une figure ne comportant qu'une seule courbe, afin de réaliser une **présélection**. Si on a plusieurs courbes, on peut ne lier le picker qu'à certaines d'entre elles. Si plusieurs sont réceptives au picker, la fonction liée sera déclenchée une fois pour chacune.
|
|
Si on a plusieurs courbes, on peut ne lier le picker qu'à certaines d'entre elles. Si plusieurs sont réceptives au picker, la fonction liée sera déclenchée une fois pour chacune.
|
|
|
|
|
|
|
|
![sélection picker](uploads/510c61180d0c1d51a059871fed23ab1c/selection_picker.png)
|
|
![sélection picker](uploads/510c61180d0c1d51a059871fed23ab1c/selection_picker.png)
|
|
|
|
|
... | @@ -341,3 +334,4 @@ nuage, = ax.plot(x, y, '*', c='blue', label="nuage", picker=init_radius, ls='Non |
... | @@ -341,3 +334,4 @@ nuage, = ax.plot(x, y, '*', c='blue', label="nuage", picker=init_radius, ls='Non |
|
textbox_radius.on_submit(submit_radius)
|
|
textbox_radius.on_submit(submit_radius)
|
|
```
|
|
```
|
|
|
|
|
|
|
|
![selection_point_mouseclick_2courbes](uploads/197d80a53567be4fb1ec3f375240f1ad/selection_point_mouseclick_2courbes.png) |
|
|
|
\ No newline at end of file |