Modules graphiques Python en Avril - matplotlib et turtle !
Posté le 03/02/2020 22:13
Bonne nouvelle, Casio-fans ! Vos voeux les plus fous de modules graphiques Python sont probablement sur le point d'être exaucés.
Olivier Lecluse, sur Twitter, a écrit :Idéalement on pourrait imaginer que les plotlib soient des sous parties de matplotlib, qui est un peu le standard en python, ce qui assurerait une certaine cohérence. Sait-on si c'est le cas avec ti-plotlib?
(
source)
Eh bien oui, Casio a fait attention à la compatibilité pour ses modules Python. Le module de tracé, qui permet de
« programmer l’affichage de tracés en classe de mathématiques comme de physique », est conforme à l'API du module
pyplot de
matplotlib, un projet très populaire et le standard
de facto pour le tracé en Python.
Le module de tracé, façon matplotlib
Dans sa
dernière newsletter datée du 10 Janvier, Casio nous montre en effet à la fois des images, mais aussi du code. Comme on va le voir tout de suite, le même code marche sur PC comme sur calculatrice à condition de changer le nom de module Casio
matplotl en
matplotlib.pyplot.
La newsletter annonce :
• Des fonctions de matplotlib:
bar(),
scatter(),
boxplot(),
arrow(), et
plot().
• Une fonction exclusive:
boxplotFR(), pour les diagrammes en boîtes à moustache avec les quartiles français.
Et voici les exemples proposés, avec la comparaison entre la calculatrice et le PC.
from matplotl import *
arrow(0.20, 0.54, 0, -0.1)
arrow(0.30, 0.46, 0, -0.1)
arrow(0.40, 0.59, 0, -0.1)
show()
from matplotl import *
x=[100,110,120,130,140,150,160]
y=[105,95,75,68,53,46,31]
scatter(x,y)
axis([80,170,10,130])
text(110,125,"Nombre d'acheteurs vs prix de vente")
show()
from matplotlib.pyplot import *
def f(x):
return x**3-6*x**2+9*x+1
start = -0.5
end = 4.5
steps = 0.1
x=[start+i*steps for i in range(int((end-start)/steps)+1)]
y=[f(j) for j in x]
plot(x,y)
show()
from matplotlib.pyplot import *
x=[119.1,119.3,119.5,119.6,119.9,120.0,120.1,120.3,120.4]
y=[1,3,4,3,1,3,1,3,1]
bar(x,y,0.08)
show()
Eh ben wow, c'est vraiment réussi ! On dirait presque un portage en règle. La compatibilité est juste totale.
Dessin glouton avec le module turtle
L'autre module présenté (celui qui vaut le pluriel dans le nom de cet article) c'est
turtle. Celui-ci est vraiment identique à la version qu'on trouve sur ordinateur, jusqu'au nom. Il ressemble beaucoup au langage de programmation du menu algorithm de la fx-92 Scientifique Collège+... mais en Python.
On y retrouve plein de fonctions bien connues !
•
pendown(),
penup(),
pencolor() et
pensize() pour modifier les paramètres du crayon.
•
forward(),
backward(),
right(),
left() et
goto() pour se déplacer (et dessiner si le crayon est en position basse).
• Et même
setheading() et
circle() !
Voici la comparaison avec le PC pour les exemples qui sont proposés.
from math import exp
from turtle import *
for i in range(1,37):
red=(exp(-0.5*((i-6)/12)**2))
green=(exp(-0.5*((i-18)/12)**2))
blue=(exp(-0.5*((i-30)/12)**2))
pencolor([red,green,blue])
for i in range(1,5):
forward(60)
right(90)
right(10)
from turtle import *
def koch(n,l):
if n==0:
forward(l)
else:
koch(n-1,l/3)
left(60)
koch(n-1,l/3)
right(120)
koch(n-1,l/3)
left(60)
koch(n-1,l/3)
pencolor("blue")
penup()
goto(-180,-50)
pendown()
koch(4,360)
Comme vous pouvez le voir, tous ces modules sont vraiment fidèles aux bibliothèques Python déjà répandues.
Date de sortie et installation
La newsletter annonce une
date de sortie en Avril et donne déjà des instructions d'installation !
Pour pouvoir utiliser ces nouvelles commandes sur votre calculatrice Graph 35+E II ou Graph 90+E, il vous suffira de la mettre à jour en
avril avec la bibliothèque
casioplot, puis d’ajouter les programmes matplotl et turtle (téléchargeables gratuitement sur
www.casio-education.fr).
Les calculatrices Graph 35+E II et Graph 90+E se comportant comme des clés USB, vous pouvez toujours transférer, via un simple copier-coller, un fichier Python de votre calculatrice à l’ordinateur et inversement. Pas besoin de logiciel de transfert ou de conversion ! Et si vous souhaitez utiliser les programmes graphiques créés sur votre calculatrice, sur votre ordinateur, il vous suffira simplement de remplacer sur vos scripts le nom de la bibliothèque matplotl par matplotlib.
D'après ces instructions, il y aura deux composants:
une bibliothèque casioplot, et deux scripts matplotl.py et turtle.py. Cela expliquerait pourquoi le nom du module de tracé a été raccourci de matplotlib à juste matplotl : les noms de fichiers sur les Graph sont limités à 8 caractères !
Le nom casioplot laisse à penser que le coeur de la bibliothèque est spécifique aux calculatrices Casio et partagée entre les deux modules matplotl et turtle. Casio a donc codé ses propres fonctions, mais a quand même tenu à respecter les APIs répandues du Python pour plus de compatibilité ! Eh bien merci !
Le bonus : scripts compatibles calto/PC sans modification
Comme le nom du module est différent entre la calculatrice et le PC, on peut penser qu'un même programme ne peut pas être lancé sur les deux sans modification. Heureusement, Python a tout prévu ! Si on tente d'importer un module qui n'existe pas, une
ImportError se produit. On peut le détecter et alors charger l'autre module au besoin !
try:
from matplotl import *
except ImportError:
from matplotlib.pyplot import *
Je vous laisse imaginer de quoi jouer avec cette technique, qui permet aussi de détecter les différents modèles de calculatrices (par exemple en important tiplotlib sur TI ou kandinsky sur Numworks) !
Article connexe sur TI-Planet :
matplotlib.pyplot + turtle dans ton Python Casio; avril 2020
À bientôt sur Planète Casio !
Fichier joint
Citer : Posté le 20/03/2020 10:23 | #
Event rush de sortie, une semaine pour créer un jeu avec la nouvelle bibliothèque graphique
Citer : Posté le 20/03/2020 10:26 | #
Oh, c'est pas une mauvaise idée. Quelqu'un avait suggéré de faire un concours de démos, ces petits programmes qui font juste des jolis effets graphiques, des couleurs, des cubes en 3D, ou ce genre d'animations. Ça pourrait être sympa, vous pensez ?
Citer : Posté le 20/03/2020 10:30 | #
Je pense que ça pourrait être très intéressant !
Citer : Posté le 20/03/2020 10:37 | #
Event rush de sortie, une semaine pour créer un jeu avec la nouvelle bibliothèque graphique
Pour un jeu il serait pratique d'avoir une bibliothèque pour tester les appuis de touches.
Je n'ai à date rien vu passer en ce sens.
Il y a certes la possibilité de se la fabriquer soi-même en utilisant le module sys :
https://tiplanet.org/forum/viewtopic.php?f=41&t=23582
Mais le module sys n'est à date pas disponible dans le Python de Casio.
Citer : Posté le 20/03/2020 10:42 | #
J'avais déjà lu l'article, la bibliothèque pourrait être plus propre à mon avis (je n'ai pas la calculatrice et donc pas essayé de l'améliorer).
En effet il n'y a rien d'équivalent, j'ai parcouru toutes les bibliothèques disponibles et je n'ai rien trouvé permettant de l'émuler
Je place de l'espoir qu'il y ait quelque sorte de détection d'entrée utilisateur dans le module de Casio.
Au pire on restera avec input, il y a des possibilités de jeux tour par tour intéressantes
Citer : Posté le 20/03/2020 14:16 | #
Ouais un ptit concours ça serait sympa en plus ça permettrait d'aller regarder toutes les possibilités du module et donc de le découvrir
Juste une petite question comme ça (je ne crois pas que ça à été demandé): on doit s'attendre à quoi niveau rapidité de tracé ?
-Planétarium 2
Citer : Posté le 20/03/2020 14:20 | #
Okay je vais essayer de planifier ça ! Je pense pas que j'aurai un lot à proposer, mais on peut toujours s'amuser avec le site.
Niveau vitesse on n'en a aucune idée, il faudra vraiment tester pour avoir la moindre information fiable.
Citer : Posté le 20/03/2020 14:22 | #
Oky, niveau vitesse d’exécution sur ordi c'est déjà lent donc faut pas se faire d'illusions dans tout les cas..
Ajouté le 22/03/2020 à 16:45 :
Vous savez si on aura droit à de magnifiques fonctions telles que contours 3d ?
-Planétarium 2
Citer : Posté le 22/03/2020 16:55 | #
Vous savez si on aura droit à de magnifiques fonctions telles que contours 3d ?
Sûrement pas, ne t'attend pas à des choses incroyables.
On devra regarder les fonctions "low level" de la lib principale de Casio, et même là ce ne sera pas codé par défaut.
Citer : Posté le 22/03/2020 16:56 | #
Je n'y crois pas vraiment... x)
Citer : Posté le 22/03/2020 17:47 | #
Je n'y crois pas vraiment... x)
T'as l'air d'en savoir plus que nous , là ...
Passé ici il y a peu. ಥ‿ಥ
Jouez à Mario sans arrêt sur votre Casio !
City Heroes
Piano Casio
Micro GIMP
Citer : Posté le 22/03/2020 18:25 | #
Ils ont été jusqu'à lister presque toutes les fonctions du module dans la présentation. Je doute qu'il reste des choses aussi grosses cachées derrière et ignorées alors qu'un tel niveau de détail a été mis en oeuvre.
Citer : Posté le 22/03/2020 21:56 | #
Tu pourrais nous faire part de l'endroit ou tu as eu ces infos ?
-Planétarium 2
Citer : Posté le 22/03/2020 22:09 | #
Tout est cité dans l'article, en l'occurrence c'est la newsletter qui est mentionnée au tout début. Comme d'habitude, vous disposez de tous les documents dont je dispose.
Je reconnais par contre que c'est pas évident, il faut cliquer sur le lien que j'ai donné et ensuite cliquer sur "voir l'extrait" pour avoir accès au document complet.
Citer : Posté le 01/04/2020 01:12 | #
Le bonus : scripts compatibles calto/PC sans modification
NumWorks sort ce soir une mise à jour incluant lui aussi matplotlib.pyplot.
Et excellente nouvelle, les scripts Python Casio matplotl sont également compatibles NumWorks sans modification !
Exemples illustrés sur NumWorks / Casio / PC :
from matplotlib.pyplot import *
except:
from matplotl import *
x = [119.1, 119.3, 119.5, 119.6, 119.9, 120.0, 120.1, 120.3, 120.4]
y = [1, 3, 4, 3, 1, 3, 1, 3, 1]
bar(x, y, 0.08)
show()
from matplotlib.pyplot import *
except:
from matplotl import *
x = [100, 110, 120, 130, 140, 150, 160]
y = [105, 95, 75, 68, 53, 46, 31]
scatter(x, y)
axis([80, 170, 10, 130])
text(110, 125, "Nombre d'acheteurs vs prix de vente")
show()
from matplotlib.pyplot import *
except:
from matplotl import *
def fonction():
def f(x):
return x**3-6*x**2+9*x+1
start = -0.5
end = 4.5
steps = 0.1
x = [start+i*steps for i in range(int((end-start)/steps)+1)]
y = [f(j) for j in x]
plot(x, y)
show()
from matplotlib.pyplot import *
except:
from matplotl import *
arrow(0.20, 0.54, 0, -0.15)
arrow(0.30, 0.46, 0, -0.15)
arrow(0.40, 0.59, 0, -0.15)
show()
Pour la rentrée 2020 grâce au Python matplotlib.pyplot, les incompatibilités de programmation graphique entre modèles de différentes marques commencent enfin à tomber !
De nouvelles possibilités à exploiter en perspective.
Citer : Posté le 01/04/2020 08:28 | #
C génial ça Le seul truc que je n'apprécie pas trop (et je ne pense pas être le seul ) ce sont les vecteurs de Casio dont les têtes flèches sont démesurées (et nottament par rapport à celles de le NumWorks ) mais à part ce petit détail de rien du tout ce portage va être génial ! On l'attends de pied ferme !
Je me demande juste si les libs seront intégrées dans l'appli python grâce à la mise a jour, ou simplement incluses dans des fichiers .py à ajouter dans le stockage de la calto.. En lisant la Newsletter de Casio Education (voir post principal) j'ai cru comprendre que mise à jour et installation de libs annexes seraient de mise.. auront nous donc accès au code de ces libs.. ?
En tout cas ça va être vraiment super
-Planétarium 2
Citer : Posté le 01/04/2020 09:29 | #
Je me permet de faire deux conseils, qui font partie des bonnes pratiques Python :
– Ne jamais utiliser from something import * mais plutôt from something import tool_1, tool_2 ou import something as s
– Toujours attraper une exception précise : try something; catch ImportError
Le premier point sert à éviter des conflits de noms, tout en assurant la traçabilité de chaque fonction appelée (savoir quel module la contient).
Le second évite de s'arracher les cheveux quand on découvre une erreur plus tard dans le code
Quitte à faire découvrir Python aux étudiants, autant montrer les bonnes pratiques d'entrée de jeu
Dans ce cas, ça donnerait ça :
import matplotlib.pyplot as p
except ImportError:
import matplotl as p
p.arrow(0.20, 0.54, 0, -0.15)
p.arrow(0.30, 0.46, 0, -0.15)
p.arrow(0.40, 0.59, 0, -0.15)
p.show()
Mis à part ça, on commence à voir l'intérêt d'un langage commun aux différents constructeurs, c'est cool
Citer : Posté le 01/04/2020 09:38 | #
Merci.
Citer : Posté le 01/04/2020 09:40 | # | Fichier joint
Edit, j'avais laissé une coquille dans le code, c'est corrigé. x)
Ajouté le 01/04/2020 à 09:50 :
Sachant en plus que la gestion des exceptions en Python est particulièrement puissante : celles-ci sont des classes qui héritent de manière logique les unes des autres :
On peut donc suivant l'erreur que l'on cherche à éviter choisir une exception qui va bien :
try:
return a[0] + a[1] / b
except ZeroDivisionError:
print("b ne doit pas être égal à 0 !")
except IndexError:
print("a doit être une liste d'au moins 2 éléments")
except Exception as e:
print("Une erreur non gérée a été levée :", e)
Citer : Posté le 05/04/2020 20:05 | #
Vous pensez qu'il est possible que CASIO fasse passer d'autres libs avec les deux annoncées pour mercredi ? Pcq la gestion de l'interface graphique va amener des soucis qui vont nécessiter la gestion du temps.. enfin je pense
-Planétarium 2
Citer : Posté le 05/04/2020 23:05 | #
Des mises à jour surprise ? J'en doute, pour être honnête. S'il doit y avoir des interfaces graphiques (eg. entrées clavier) en Python ça viendra après.