Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Actualités


Index du Forum » Actualités » Modules graphiques Python en Avril - matplotlib et turtle !
Lephenixnoir Hors ligne Administrateur Points: 17872 Défis: 142 Message

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


Disperseur Hors ligne Membre Points: 1783 Défis: 1 Message

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
Mes meilleurs jeux
N'hésitez pas, notez !

Jeux BasicCasio / CBasicCasio:
-World Tank War II
-Apollo 11
-GeoGraph ! Élu Jeu du Mois de Mars 2019 !
Jeux C:
-Planétarium 2 ! Chef d'Oeuvre !


√(2+2-2+2-2+2+2-2-2-2) = 0
Lephenixnoir Hors ligne Administrateur Points: 17872 Défis: 142 Message

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.
Disperseur Hors ligne Membre Points: 1783 Défis: 1 Message

Citer : Posté le 06/04/2020 07:59 | #


Sont vraiment lents
Mes meilleurs jeux
N'hésitez pas, notez !

Jeux BasicCasio / CBasicCasio:
-World Tank War II
-Apollo 11
-GeoGraph ! Élu Jeu du Mois de Mars 2019 !
Jeux C:
-Planétarium 2 ! Chef d'Oeuvre !


√(2+2-2+2-2+2+2-2-2-2) = 0
Critor En ligne Administrateur Points: 1784 Défis: 18 Message

Citer : Posté le 07/04/2020 12:05 | #


Maintenant, petit test de compatibilité Casio / NumWorks / ordi, autour du module turtle.

Basé sur les exemples fournis et illustrés par Casio, nous ne disposons pas de préversion de l'OS.

On commence par une petite rosace; tout possesseur de Graph 35+E II sait que Casio adore ça :
from turtle import *

speed(0)
for i in range(12):
  left(30)
  for i in range(8):
    forward(30)
    left(45)

Le code d'exemple fourni par Casio passe ici sans problème sur NumWorks et sur ordi.



On poursuit maintenant avec le flocon de Koch :
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)

Ici encore aucun problème, compatibilité totale !



Nous arrivons maintenant à un soleil. Mais ici hélas, le code de Casio ne marche pas sur NumWorks :
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)

Le problème semble ici être que la Casio et la NumWorks n'utilisent pas par défaut le même système de coordonnées pour les composantes couleurs en turtle :
- nombre flottant de 0.0 à 1.0 sur Casio
- nombre entier de 0 à 255 sur NumWorks
Qui a raison ? Il semble que ce soit Casio, l'ordinateur n'ayant aucun problème à exécuter ce code, vive Casio !

Notons que sur les implémentations Python complètes on peut régler le comportement souhaité à l'aide des appels respectifs turtle.colormode(1.0) et turtle.colormode(255).
Toutefois cette fonction n'est hélas pas incluse chez NumWorks.

En conséquence, nous proposons le code corrigé ci-dessous, avec une fonction intermédiaire mypencolor() qui corrigera les coordonnées si nécessaire, et qui à la différence marchera aussi sur NumWorks :

from math import exp
from turtle import *

def mypencolor(t):
  cmax = 255
  try:
    pencolor((2, 2, 2))
  except:
    cmax = 1
  if(cmax == 1 and max(t)>1):
    t = tuple(u/255 for u in t)
  elif(cmax == 255 and any(isinstance(u, float) for u in t)):
    t=tuple(int(255*u) for u in t)
  pencolor(t)

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))
  mypencolor([red, green, blue])

  for i in range(1, 5):
    forward(60)
    right(90)
  right(10)



Enfin nous terminons avec une coquille d'escargot et malheureusement même problème, le code de Casio marche partout sauf sur NumWorks :
from turtle import *
from math import *

penup()
goto(0, -20)
pendown()
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])
  circle(50-i)
  right(10)

En conséquence, même correction en attendant mieux :

from turtle import *
from math import *

def mypencolor(t):
  cmax = 255
  try:
    pencolor((2, 2, 2))
  except:
    cmax = 1
  if(cmax == 1 and max(t)>1):
    t = tuple(u/255 for u in t)
  elif(cmax == 255 and any(isinstance(u, float) for u in t)):
    t=tuple(int(255*u) for u in t)
  pencolor(t)

penup()
goto(0, -20)
pendown()
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))
  mypencolor([red,green,blue])
  circle(50-i)
  right(10)


Même si il faut encore faire des efforts, c'est génial d'avoir enfin une certaine compatibilité graphique de plus standard sur nos calculatrices !

Ajouté le 07/04/2020 à 12:15 :
Et nouveau test comparatif avec un script d'exemple turtle tout frais fourni par Casio :
from turtle import *

forward(40)
backward(100)
left(90)
forward(30)
right(60)
forward(60)
right(30)
forward(30)
penup()
forward(18);right(90);forward(60)
pendown()
right(30);backward(30);right(60);forward(60)
pencolor("orange")
pencolor("mangenta")
pencolor("red")
penup()
goto(80,40)
right(140);pendown()
circle(30)
penup();goto(105,50);pencolor("green");pendown()
circle(-50)
penup();pencolor("red");right(21);goto(60,20);pendown()
circle(40,60)
penup();pencolor("blue");goto(-50,15);setheading(0);pendown()
write("CASIO")

Un script en l'honneur de la superbe Graph 90+E !


Les Casio se comportent apparemment aussi bien que l'ordi.
Plusieurs problèmes par contre sur NumWorks, qui :
- d'une part ne gère pas l'astuce de passer un paramètre négatif à circle() pour changer le sens de tracer, alors que pourtant bien géré sur ordi et Casio
- d'autre part n'inclut apparemment pas l'instruction d'écriture de texte write()
Lephenixnoir Hors ligne Administrateur Points: 17872 Défis: 142 Message

Citer : Posté le 07/04/2020 15:20 | #


Eh bien, Casio a fait fort sur ce coup-là. Ils ont visé la compatibilité bien comme il faut et pas lésiné. C'est génial !
Critor En ligne Administrateur Points: 1784 Défis: 18 Message

Citer : Posté le 07/04/2020 15:48 | #


Merci pour ta réponse.

Justement je voulais savoir si je peux à ton avis mettre ces tests en page d'accueil, ou si il vaut mieux laisser le vote du JdM à la une encore quelques temps.
Lephenixnoir Hors ligne Administrateur Points: 17872 Défis: 142 Message

Citer : Posté le 07/04/2020 15:48 | #


Non, je pense que tu peux y aller. Si tu as le temps profite-en pour raconter brièvement la formation en ligne
Critor En ligne Administrateur Points: 1784 Défis: 18 Message

Citer : Posté le 07/04/2020 15:51 | #


Merci.

C'est demain la tournée pédagogique lycée.
Même pas sûr que je puisse y aller dans les conditions actuelles...
-florian66- Hors ligne Ancien rédacteur Points: 2335 Défis: 20 Message

Citer : Posté le 07/04/2020 15:59 | #


C'est très encourageant et Casio a plutôt intérêt à faire ça ! Je veux dire, s'il veut que les étudiants puissent utiliser les programmes Casio directement sur ordinateur (ou vice-versa), il se doit de proposer une compatibilité complète
In Arch, I trust ! And you ?

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 35 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd