Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • PYTHON - Atelier MatPlotLib PYTHON - Atelier MatPlotLib
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

La forge institutionnelle d'INRAE étant en production depuis le 10 juin 2025, nous vous recommandons d'y créer tous vos nouveaux projets.

  • Poulard Christine
  • PYTHON - Atelier MatPlotLibPYTHON - Atelier MatPlotLib
  • Wiki
  • Atelier_clics

Atelier_clics · Changes

Page history
Update Atelier_clics authored Sep 15, 2021 by Poulard Christine's avatar Poulard Christine
Show whitespace changes
Inline Side-by-side
Atelier_clics.md
View page @ 70f919d6
......@@ -18,7 +18,9 @@ Exemple [d'événements ](https://matplotlib.org/stable/users/event_handling.htm
## Avec un "MouseEvent"
```plaintext
### pour commencer, le "clic" écrit juste les coordonnées dans la console
```python
import matplotlib.pyplot as plt
def onclick(event):
......@@ -35,9 +37,11 @@ Prenons un code \[proposé pour expliquer le principe\]([https://stackoverflow.c
* sur la figure, on connecte l'événement "button_press_event" avec la fonction onclick : concrètement, si on clique quelque part dans la figure, on déclenche la fonction en lui passant comme argument l'événement
* les attributs **xdata** et **ydata** de l'événement sont les coordonnées de la souris dans l'unité de la courbe, si la souris est sur un "Axes" ; l'axe sera alors retrouvé avec l'attributs **inaxes**. A ne pas confondre avec **x** et **y** qui sont les coordonnées en pixels.
* dans la fonction onclick, on se contente d'écrire les valeurs dans la console.
| ![Figure_10points_alignes](uploads/92107c1130854bb0ddea14c603a7fed8/Figure_10points_alignes.png) | ![Figure_on_ajoute_des_points](uploads/f7559a93cb64796ce97dca1714d8c0f3/Figure_on_ajoute_des_points.png) |
|--------------------------------------------------------------------------------------------------|--|
| courbe **donnees** initiale, 10 points alignés | courbes avec points ajoutés à la souris |
### le "clic" ajoute un point
| Figure initiale | Figure après plusieurs clics |
|-----------------|------------------------------|
| ![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.
......@@ -51,18 +55,37 @@ import numpy as np
fig = None
def onclick(event):
def onclick_ajouter(event):
donnees.set_xdata(np.append(donnees.get_xdata(), event.xdata))
donnees.set_ydata(np.append(donnees.get_ydata(),event.ydata))
fig.canvas.draw_idle()
fig,ax = plt.subplots()
donnees, = ax.plot(range(10), marker='o')
fig.canvas.mpl_connect('button_press_event', onclick)
fig.canvas.mpl_connect('button_press_event', onclick_ajouter)
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. Il restera à déplacer la courbe "sélection"; réduite à un point, aux coordonnées de ce point.
```python
def onclick_proche(event):
x_souris, y_souris = event.xdata, event.ydata
distances = [((x-x_souris)**2 + (y-y_souris)**2)**(1/2) for x,y in zip(donnees.get_xdata(), donnees.get_ydata())]
distance_min = min(distances)
idx_min = np.argmin(distances)
selection.set_data([donnees.get_xdata()[idx_min]], [donnees.get_ydata()[idx_min]])
fig.canvas.draw_idle()
fig,ax = plt.subplots()
donnees, = ax.plot(range(10), marker='o')
selection, = ax.plot([0],[0], marker='*', c='red')
fig.canvas.mpl_connect('button_press_event', onclick_proche)
plt.show()
```
## Avec un "PickEvent" :
......@@ -180,3 +203,5 @@ def submit_radius(val):
nuage, = ax.plot(x, y, '*', c='blue', label="nuage", picker=init_radius, ls='None')
textbox_radius.on_submit(submit_radius)
```
![Figure_selection_point_proche](uploads/d108c419b577d18f8c8296a4c6c7f6a7/Figure_selection_point_proche.png)
\ No newline at end of file
Clone repository
  • AtelierB1_Graphiques_simples
  • AtelierB2_Lire_un_fichier
  • AtelierC
  • Atelier_D_carte
  • Atelier_D_carte_a_partir_de_fichiers_binaires
  • Atelier_E_longues_series
  • Atelier_G_widgets
  • Atelier_clic_afficher
  • Atelier_clics
  • Cartes focus sur le redimensionnement
  • GUI avec QT
  • La doc avec Sphinx
  • Lexique
  • Point Théorie Subplots
  • Pour les contributeurs
View All Pages