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 En ligne Administrateur Points: 17448 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


Lephenixnoir En ligne Administrateur Points: 17448 Défis: 142 Message

Citer : Posté le 20/03/2020 10:21 | #


C'est pour bientôt. Préparez vos calculatrices pour tester ça !

Btwi il faudrait que je note ça sur le calendrier en page d'accueil, ça pourrait être sympa.
Kikoodx En ligne Membre Points: 1939 Défis: 11 Message

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
Lephenixnoir En ligne Administrateur Points: 17448 Défis: 142 Message

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 ?
Kikoodx En ligne Membre Points: 1939 Défis: 11 Message

Citer : Posté le 20/03/2020 10:30 | #


Je pense que ça pourrait être très intéressant !
Critor En ligne Administrateur Points: 1671 Défis: 18 Message

Citer : Posté le 20/03/2020 10:37 | #


Kikoodx a écrit :

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.
Kikoodx En ligne Membre Points: 1939 Défis: 11 Message

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

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é ?
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 En ligne Administrateur Points: 17448 Défis: 142 Message

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

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 ?
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
Kikoodx En ligne Membre Points: 1939 Défis: 11 Message

Citer : Posté le 22/03/2020 16:55 | #


Disperseur a écrit :
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.
Lephenixnoir En ligne Administrateur Points: 17448 Défis: 142 Message

Citer : Posté le 22/03/2020 16:56 | #


Je n'y crois pas vraiment... x)
Captainluigi Hors ligne Membre Points: 730 Défis: 1 Message

Citer : Posté le 22/03/2020 17:47 | #


Lephenixnoir a écrit :
Je n'y crois pas vraiment... x)

T'as l'air d'en savoir plus que nous , là ...
Les bons artistes copient, les grands artistes volent. Picasso
Jouez à Mario sans arrêt sur votre Casio !
Ma chaine YouTube : Tutodev
Cliquez pour découvrir
Cliquez pour recouvrir
Lephenixnoir En ligne Administrateur Points: 17448 Défis: 142 Message

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

Citer : Posté le 22/03/2020 21:56 | #


Tu pourrais nous faire part de l'endroit ou tu as eu ces infos ?
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 En ligne Administrateur Points: 17448 Défis: 142 Message

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.
Critor En ligne Administrateur Points: 1671 Défis: 18 Message

Citer : Posté le 01/04/2020 01:12 | #


"Lephenixnoir" a écrit :
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 :

try:
  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()



try:
  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()



try:
  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()



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

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
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
Dark storm Hors ligne Membre d'honneur Points: 10963 Défis: 176 Message

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 :

try:
  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
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Critor En ligne Administrateur Points: 1671 Défis: 18 Message

Citer : Posté le 01/04/2020 09:38 | #


Merci.
Dark storm Hors ligne Membre d'honneur Points: 10963 Défis: 176 Message

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 :


Source: https://o7planning.org/en/11421/python-exception-handling-tutorial


On peut donc suivant l'erreur que l'on cherche à éviter choisir une exception qui va bien :

def f(a, b):
    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)

Finir est souvent bien plus difficile que commencer. — Jack Beauregard

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 75 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