... | ... | @@ -28,12 +28,14 @@ On définit une courbe fixe avec **plot**, une sinusoïde. Il ne serait pas néc |
|
|
|
|
|
On place une textbox dans la vignette ax_tbox. On n'a pas besoin de la nommer car elle est définie dans le programme principal, le "garbage collector" ne va donc pas l'expulser. , on a défini une couleur de fond et une couleur "en cas de survol" : quand on passe la souris au-dessus ("hover"), la couleur changera.
|
|
|
|
|
|
### définition de la fonction associée à un événement ("callback")
|
|
|
|
|
|
| la souris ne survole pas la textbox | la souris survole la textbox |
|
|
|
|-------------------------------------|------------------------------|
|
|
|
| ![Sinus_modifiable](uploads/aa1f7671490ea6eecddd2a91bda8b21c/Sinus_modifiable.JPG) | ![sinusoide](uploads/6c86fcf0d9febe8626c3c38b407f5a6b/sinusoide.png) |
|
|
|
|
|
|
L'événement **on_submit**="une valeur a été modifiée dans la textbox" est associé à une fonction, appelée update, qu'il faut à présent définir\*\*. Cette fonction va tout simplement lire la valeur dans la textbox (argument "val" de la fonction ), transformée en entier positif, et tirer au hasard autant de valeurs aléatoires entre un et 6, et placer les points (x, sin(x)) pour tous les points x de cette série. Au lieu de définir une nouvelle courbe à chaque fois, on va modifier scat, grâce à la méthode **set_offsets** qui est analogue à la méthode **set_data** pour plot. On en profite aussi pour modifier une liste d'étiquettes que l'on va placer sur le graphique grâce à la méhtode **annotate**, qu'il est utile de connaître. On verra donc :
|
|
|
### définition de la fonction associée à un événement ("callback")
|
|
|
L'événement **on_submit**="une valeur a été modifiée dans la textbox" est associé à une fonction, appelée update, qu'il faut à présent définir\*\*. Cette fonction va tout simplement lire la valeur dans la textbox (argument "val" de la fonction ), la transformer en entier positif, et tirer au hasard autant de valeurs aléatoires entre 0 et 6 (donc à peu près entre 0 et 2 pi), et placer les points (x, sin(x)) pour tous les points x de cette série. On modifie la valeur dans la textbox pour refléter les éventuels changements qui ont été faits : on prend la valeur absolue de la partie entière, et si ça n'est pas un chiffre on prend la valeur par défaut.
|
|
|
Au lieu de définir une nouvelle courbe à chaque fois, on va modifier scat, grâce à la méthode **set_offsets** qui est analogue à la méthode **set_data** pour plot. On en profite aussi pour modifier une liste d'étiquettes que l'on va placer sur le graphique grâce à la méthode **annotate**, qu'il est utile de connaître. On verra donc :
|
|
|
|
|
|
- les points, représentés par des carrés ; pour montrer comment changer les couleurs dans scatter, on a décidé que le 2e de chaque série, dans l'ordre de tirage, sera rouge et les autres orange ; pour en savoir plus, la [page dédiée à scatter](focus_scatter) est beaucoup plus détaillée ;
|
|
|
- les annotations, qui correspondent à l'abscisse mise en forme grâce à une f-string (valeur précédée de # et avec 2 chiffres après la virgule)
|
... | ... | @@ -44,7 +46,7 @@ from matplotlib import pyplot as plt |
|
|
from matplotlib.widgets import TextBox
|
|
|
import numpy as np
|
|
|
|
|
|
x = np.arange(0, 2 * np.pi, 0.01)
|
|
|
x = np.arange(0, 2 * np.pi, 0.01) # définition des points de la sinusoïde de 0 à 2 pi, par pas de 0.01
|
|
|
nb_points_ini = 3
|
|
|
ann_list = []
|
|
|
|
... | ... | @@ -59,9 +61,9 @@ def update(val): |
|
|
except ValueError:
|
|
|
nombre = nb_points_ini
|
|
|
|
|
|
text_box.set_val(str(nombre))
|
|
|
text_box.set_val(str(nombre)) # on place la valeur éventuellement transformée dans la textbox
|
|
|
|
|
|
# tirage de n, vecteur de taille nombre = abscisses comprises entre 0 et 6 (pour fait un motif de sinusoïde)
|
|
|
# tirage de n, vecteur de taille nombre = abscisses comprises entre 0 et 6 (pour correspondre à l'étendue d'un un motif de sinusoïde)
|
|
|
n = np.random.rand(nombre) * 6
|
|
|
scat.set_offsets(np.c_[n, np.sin(n)])
|
|
|
liste_couleurs = []
|
... | ... | |