Aller au contenu

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

    {{ IDE(...) }}
    

  • Autant de fois que de fenĂȘtres graphiques dĂ©sirĂ©es, la macro :

    {{ figure(...) }}
    

  • Dans le cas oĂč l'on dĂ©sire plusieurs fenĂȘtres, il faut les identifier. On appelera donc par exemple pour deux fenĂȘtres :

    {{ figure('cible_1') }}
    
    {{ figure('cible_2') }}
    

TracĂ© d'un seul graphique⚓

Code Markdown dans le fichier .md
{{ IDE('scripts/fct_carre') }}
{{ figure() }}
###(Dés-)Active le code aprÚs la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Votre figure

Votre tracé sera ici

Fichier python utilisé pour cet exemple
fct_carre.py
# --- 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⚓

Code Markdown dans le fichier .md
{{ IDE('scripts/fct_cube') }}
{{ figure('cible_1') }}

{{ IDE('scripts/fct_sqrt') }}
{{ figure('cible_2') }}

Rendu


###(Dés-)Active le code aprÚs la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Votre figure

Votre tracé sera ici

###(Dés-)Active le code aprÚs la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Votre figure

Votre tracé sera ici

Fichiers Python utilisés pour cet exemple
fct_cube.py
# --- 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()
fct_sqrt.py
# --- 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⚓

Code Markdown dans le fichier .md
{{ IDE('scripts/carre_cube_superposees') }}
{{ figure('cible_double') }}

Rendu


###(Dés-)Active le code aprÚs la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Votre figure

Votre tracé sera ici

Fichier Python utilisé pour cet exemple
carre_cube_superposees.py
# --- 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()

Attention

Il ne faut pas utiliser plusieurs fois le mĂȘme identifiant dans une page du site, par exemple ici l'identifiant cible_1

{{ figure('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.

{{ figure() }}

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 :

    YAML
    plugins:
      - pyodide_macros:
          build:
            python_libs:
              - turtle
    

  • 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 fichier turtle.zip puis mettre le dossier turtle Ă  la racine du projet.

turtle

Vous obtiendrez :

turtle Ă  la racine

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.

Code Markdown dans le fichier .md
???+ question "Utilisation de la tortue"


    {{ IDE('scripts/arbre_tortue') }}

    {{ figure('cible_3') }}
Utilisation de la tortue

###(Dés-)Active le code aprÚs la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Votre figure

Votre tracé sera ici

Fichier Python utilisé pour cet exemple
arbre_tortue.py
# --------- 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 Ă  :

{{ figure('cible_3') }}
Code Ă  copier
# --------- 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