Tracés avec matplotlib et turtle
Utiliser les bibliothĂšques graphiques
Utiliser les bibliothÚques graphiques n'est pas tout à fait immédiat.
Voici trois exemples.
I. Utiliser la bibliothĂšque matplotlibâïž
Le principe
Le fichier Python
Le fichier Python dans lequel se trouve le code qui permet de tracer la figure désirée peut contenir une section :
# --- PYODIDE:env --- #
Dans cette section on fera en premier l'import import matplotlib.pyplot as plt
et on on créera des objets PyodidePlot
qui permettront ensuite d'utiliser les sytaxes habituelles de matplotlib avec plt
et de tracer les figures aux bons endroits dans la page.
Le fichier Markdown
Le principe est d'appeler :
-
Une fois la macro
-
Autant de fois que de fenĂȘtres graphiques dĂ©sirĂ©es, la macro :
-
Dans le cas oĂč l'on dĂ©sire plusieurs fenĂȘtres, il faut les identifier. On appelera donc par exemple pour deux fenĂȘtres :
TracĂ© d'un seul graphiqueâïž
Votre figure
Fichier python utilisé pour cet exemple
# --- PYODIDE:env --- #
# Un import de matplotlib en tout premier est indispensable, pour que la classe
# PyodidePlot devienne disponible dans l'environnement:
import matplotlib.pyplot as plt
PyodidePlot().target() # Cible la figure dans laquelle tracer la figure dans la page
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
xs = [-3 + k * 0.1 for k in range(61)]
ys = [x**2 for x in xs]
plt.plot(xs, ys, "r-")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction carré")
plt.show()
TracĂ© de deux graphiques diffĂ©rents dans deux fenĂȘtres diffĂ©rentesâïž
{{ IDE('scripts/fct_cube') }}
{{ figure('cible_1') }}
{{ IDE('scripts/fct_sqrt') }}
{{ figure('cible_2') }}
Rendu
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
Fichiers Python utilisés pour cet exemple
# --- PYODIDE:env --- #
import matplotlib.pyplot as plt
fig1 = PyodidePlot('cible_1')
fig1.target() # Pour tracer la fonction ci-dessous
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
xs = [-2 + k * 0.1 for k in range(41)]
ys = [x**3 for x in xs]
plt.plot(xs, ys, "r-")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction cube")
plt.show()
# --- PYODIDE:env --- #
import matplotlib.pyplot as plt
fig2 = PyodidePlot('cible_2')
fig2.target() # Pour tracer la fonction ci-dessous
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
from math import sqrt
xs = [k * 0.02 for k in range(201)]
ys = [sqrt(x) for x in xs]
plt.plot(xs, ys, "r-")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction racine carrée")
plt.show()
TracĂ© de deux graphiques superposĂ©s dans la mĂȘme fenĂȘtreâïž
{{ IDE('scripts/carre_cube_superposees') }}
{{ figure('cible_double') }}
Rendu
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
Fichier Python utilisé pour cet exemple
# --- PYODIDE:env --- #
import matplotlib.pyplot as plt # Indispensable (provoque la déclaration de PyodidePlot)
fig = PyodidePlot('cible_double')
fig.target()
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
xs1 = [-3 + k * 0.1 for k in range(61)]
ys1 = [x**2 for x in xs1]
xs2 = [-2 + k * 0.1 for k in range(41)]
ys2 = [x**3 for x in xs2]
plt.plot(xs1, ys1, "r-", xs2, ys2, "b+")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction carré et la fonction cube")
plt.show()
Documentation détaillée
Attention
Il ne faut pas utiliser plusieurs fois le mĂȘme identifiant dans une page du site, par exemple ici l'identifiant cible_1
Lâappel sans argument (ci-dessous) utilise Ă©galement "figure1"
comme valeur par défaut pour identifier une figure,
donc il ne peut ĂȘtre utilisĂ© quâune seule fois par page, et les autres appels ne doivent pas utiliser le mĂȘme identifiant.
II. Utiliser la bibliothĂšque simpyâïž
Calcul formel et tracés avec sympy
III. RĂ©aliser des animations avec P5âïž
Documentation officielle de Frédéric Zinelli
IV. Utiliser la tortue par Romain Janvierâïž
Pour pouvoir utiliser la bibliothĂšque turtle
Si votre site a été créé à partir du site modÚle de ce tutoriel aprÚs le 1er novembre 2024, tout fonctionnera correctement.
Sinon, vérifier les points suivants (le dossier turtle à télécharger a été modifié le 1er novembre 2024) :
Mise à jour - points à vérifier
-
Il faut rajouter dans le dossier
mkdocs.yml
: -
Il faut mettre le dossier
turtle
à la racine du site à télécharger ici : Clic droit puis "Enregistrer la cible du lien sous" Décompresser le fichierturtle.zip
puis mettre le dossierturtle
Ă la racine du projet.
Vous obtiendrez :
Remarque : exécuter deux fois un script
Avec la version actuelle, si on exĂ©cute une fois un script, la figure apparaĂźt en une seule fois. Si on exĂ©cute Ă nouveau ce mĂȘme script, on voit la tortue se dĂ©placer.
???+ question "Utilisation de la tortue"
{{ IDE('scripts/arbre_tortue') }}
{{ figure('cible_3') }}
Utilisation de la tortue
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
Fichier Python utilisé pour cet exemple
# --------- PYODIDE:env --------- #
from js import document
if "restart" in globals():
restart()
def m_a_j(cible):
done()
document.getElementById(cible).innerHTML = Screen().html
_cible = 'cible_3'
# --------- PYODIDE:code --------- #
from turtle import *
setup(640, 480) # pour dĂ©finir la taille de la fenĂȘtre
speed(10)
def arbre(l=100, n=5):
forward(l)
if n > 0:
left(45)
arbre(l/2, n-1)
right(90)
arbre(l/2, n-1)
left(45)
back(l)
arbre(200, 5)
# --------- PYODIDE:post --------- #
if Screen().html is None:
forward(0)
m_a_j(_cible)
# --------- PYODIDE:post_term --------- #
if "m_a_j" in globals():
m_a_j(_cible)
Ă recopier dans votre fichier Python
đ Il faut juste bien adapter la section # --- PYODIDE:env --- #
avec le nom de l'id utilisé dans le fichier md :
Ici _cible = 'cible_3'
correspond Ă :
# --------- PYODIDE:env --------- #
from js import document
if "restart" in globals():
restart()
def m_a_j(cible):
done()
document.getElementById(cible).innerHTML = Screen().html
_cible = 'cible_3' # adapter cette ligne
# --------- PYODIDE:code --------- #
from turtle import *
# Votre code avec turtle
# --------- PYODIDE:post --------- #
if Screen().html is None:
forward(0)
m_a_j(_cible)
# --------- PYODIDE:post_term --------- #
if "m_a_j" in globals():
m_a_j(_cible)
Crédit pour la réalisation de l'utilisation de turtle : Romain Janvier
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)