Page 1 sur 1

Python matplotlib.pyplot : test compatibilité Casio NumWorks

Message non luPosté: 07 Avr 2020, 16:35
de critor
Dans sa prochaine mise à jour gratuite désormais imminente pour Graph 35+E II et Graph 90+E, Casio va rajouter de formidables possibilités graphiques à son application Python sous la forme de deux modules importables :
  • un module casioplot
  • un script matplotl interfaçant le module casioplot afin de le rendre utilisable comme le matplotlib.pyplot standard
  • un script turtle interfaçant le module casioplot afin de le rentre utilisable comme le turtle standard
Nous allons traiter aujourd'hui de la compatibilité de matplotl, par rapport aux solutions concurrentes (calculatrice NumWorks) et au Python complet pour ordinateur.


Malgré le nommage en matplotl sur Casio (puisque c'est un script un non un module, donc limitation historique du nom de fichier à 8 caractères hors extension .py), on peut quand même avoir du code en théorie compatible tous modèles avec la petite astuce d'importation suivante :
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *


Traitons quelques exemples à la fois sur NumWorks, Casio et ordinateur pour voir jusqu'où va cette compatibilité.
Nous ne disposons certes pas d'une préversion de la mise à jour de Casio. Toutefois, ce dernier a déjà diffusé et illustré plusieurs exemples qui permettent déjà de se faire une petite idée.


Commençons déjà avec les fonctions de base, comme axies() pour régler les bornes de la fenêtre graphique, même si ce n'est pas obligatoire et qu'elles s'adapteront par défaut au contenu affiché :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

axis([0,10,2,5])
show()

Petite anomalie ici sur la NumWorks qui refuse d'afficher la fenêtre graphique, probablement parce qu'il n'y a rien d'autre à afficher que les axes.

Ou encore text() pour afficher du texte :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

text(0.4,0.9,"TITRE")
show()




Démarrons maintenant avec de petits diagrammes en barres via la fonction bar() :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  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()

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

Val=[1,2,4,7,9]
Eff=[10,15,8,13,7]
bar(Val,Eff,0.8)
show()

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

x=[1,2,3,4,5,6,7]
y=[12,17,35,29,13,9,5]
bar(x,y,0.5)
show()

Des aspect et même couleur des barres certes différents, mais cela n'en est pas moins parfaitement fonctionnel sans le moindre changement autre que l'importation, c'est fantastique ! :bj:




Passons maintenant à des nuages de points à l'aide de la fonction scatter() :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

Xlist=[1,2,4,7,9]
Ylist=[10,15,8,13,7]
scatter(Xlist,Ylist)
show()

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  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()

Casio utilisant ici pour le titre des coordonnées absolues prévues pour son écran, le positionnement n'est bien évidemment pas optimal pour d'autres plateformes, ici la NumWorks. Mais cette dernière a quand même en contrepartie le gros avantage de permettre de faire défiler la vue avec les flèches. :)




Passons maintenant à quelques diagrammes en ligne brisée et à la fonction plot() :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

def f(a):
  return 6*a-0.1*a**2
x=list(range(70))
y=[f(i) for i in x]
plot(x,y)
show()


CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  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()

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

plot([1,5,7],[8,12,10])
show()

On remarque que NumWorks utilise une graduation sur les axes, alors que les autres utilisent une graduation en bordure de fenêtre.

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

plot([1,5,7],[8,12,10],"magenta")
show()

Ah, problème ici sur la NumWorks qui n'accepte pas le 3ème argument pour la couleur avec la fonction plot(). C'est embêtant, vu que c'est du standard puisque fonctionnel sur ordinateur. Que la gestion des couleurs n'ait pas été codée est une chose, mais à des fins de compatibilité il eut mieux valu ignorer l'argument de couleur que le refuser... :'(

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

V=[20,40,60,80,100]
P=[307,150,101.7,75.8,61]
axis([0,110,0,350])
plot(V,P,"blue")
text(40,250,"P (kPa) versus V (mL)")
show()

Toujours le même problème de paramètre de couleur refusé sur la NumWorks.

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

plot(10,20,"+")
plot(5,12,"+")
plot(7,18,"+")
show()

Ici encore, problème sur la NumWorks qui refuse le 3ème argument de la fonction plot() pour la forme des points, au lieu de l'ignorer. :'(




Et enfin quelques flèches/vecteurs :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  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()

Personne ne semble tracer les pointes de flèches de la même façon, mais au moins ça marche.

CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

arrow(0.2,0.1,0.4,0.6,head_width=0.1)
show()


Terminons avec les diagrammes en boîte avec la fonction boxplot() :
CasioNumWorksordi
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

Val=[1,2,2,11,8,9,15]
boxplot(Val)
show()

Encore un petit problème ici sur la NumWorks, la fonction boxplot() n'a tout simplement pas été incluse. :'(

Et histoire d'avoir des diagrammes en boîte corrects dans le contexte de l'enseignement français, Casio invente la fonction boxplotFR() :
CasioNumWorksordi
Code: Tout sélectionner
>>> try:
...   from matplotlib.pyplot import *
... except ImportError:
...   from matplotl import *
...
>>> Val=[1,2,2,11,8,9,15]
>>> boxplotFR(Val)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'boxplotFR' is not defined
Code: Tout sélectionner
try:
  from matplotlib.pyplot import *
except ImportError:
  from matplotl import *

Val=[1,2,2,11,8,9,15]
boxplotFr(Val)
show()


Même si la NumWorks souffre ici encore de quelques lacunes, cela reste formidable d'avoir enfin après plus de trois décennies enfin une nette ébauche de compatibilité au niveau des instructions graphiques entre différents modèles de calculatrices, et de plus respectant un standard déjà existant ! :bj:

Re: Python matplotlib.pyplot : test compatibilité Casio NumW

Message non luPosté: 11 Avr 2020, 15:15
de Bisam
J'avoue ne pas comprendre le fonctionnement du développement chez Numworks...
Comment est-il envisageable de faire un port de bibliothèques standards et de rompre complètement la compatibilité avec l'existant ?

Dans la bibliothèque "matplotlib", la majeure partie des fonctions présentes sert justement à définir ce qui est "standard" et n'a pas besoin d'être précisé... Peut-être que Numworks a voulu faire des coupes franches pour éviter de faire exploser la taille en octets des fonctions ajoutées.

Re: Python matplotlib.pyplot : test compatibilité Casio NumW

Message non luPosté: 14 Avr 2020, 14:45
de critor
Apparemment, presque tous les défauts de compatibilité turtle et matplolib.pyplot de la NumWorks seront corrigés dès la prochaine mise à jour : :D
Image
https://github.com/numworks/epsilon/issues