Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Actualités


Index du Forum » Actualités » Modules graphiques Python en Avril - matplotlib et turtle !
Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 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


Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

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


Sont vraiment lents
Critor En ligne Administrateur Points: 2673 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 En ligne Administrateur Points: 24572 Défis: 170 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 !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor En ligne Administrateur Points: 2673 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 En ligne Administrateur Points: 24572 Défis: 170 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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor En ligne Administrateur Points: 2673 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: 2384 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 ?
Grabdexter Hors ligne Membre Points: 1 Défis: 0 Message

Citer : Posté le 15/06/2020 10:48 | #


J'ai besoin de dessiner quelque chose en utilisant le module tortue sur la même toile sur laquelle un graphique serait tracé.

J'ai pensé à utiliser matplotlib pour faire un graphique, mais je dois dessiner plus tard quelque chose avec tortue sur ce graphique. Je pourrais dessiner le graphique et les autres choses avec la tortue, mais c'est beaucoup plus compliqué.

Quelqu'un peut-il penser à une meilleure façon?
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 15/06/2020 10:52 | #


Bonjour
Tu peux préciser ? J'ai pas compris…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

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

Citer : Posté le 15/06/2020 11:34 | #


Il veut dessiner sur un graphe matplotlib
Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 15/06/2020 11:47 | #


Tu peux utiliser matplotlib pour dessiner un ensemble de lignes... ce n'est pas forcément très performant mais si ton dessin est mineur ça devrait aller.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


Invité

Citer : Posté le 11/02/2021 14:46 | #


J'essaie de créer un script python qui me permettra d'utiliser turtle pour tracer une fonction comme y = 0,5x + 3. Comment cela peut-il être fait?

[Lien supprimé]
Ne0tux Hors ligne Membre d'honneur Points: 3525 Défis: 265 Message

Citer : Posté le 11/02/2021 16:54 | #


Salut, qu'as-tu essayé exactement ?

Une réponse utilisant matplot est dans l'article, il suffit de modifier le polynôme de degré 3 en ta fonction affine.
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 11/02/2021 18:20 | #


Pour le faire avec turtle, il y a essentiellement deux étapes. D'abord, tu dois choisir quelle partie du graphe tu représentes à l'écran : les valeurs de x (minimum et maximum) et les valeurs de y (pareil). Comme ça, tu peux passer des coordonnées du graphe aux coordonnées à l'écran.

Ensuite, tu dois évaluer ta fonction en certains points (par exemple 1 fois tous les 2 ou 3 pixels en x), et relier les points en avançant avec la tortue.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

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
: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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 258 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