Dessin dynamique

Salut à tous,
Je suis sur Spyder Python 3.5. Je veux dessiner dynamiquement, rien à faire. Je chope des codes sur le net
rien ne marche :-(
Je veux juste dessiner la suite de points (n,n) pour qu'ils apparaissent les uns après les autres.
Quelqu'un pourrait-il m'aider ?
Mauricio

Réponses

  • Avec Turtle, easy :
    from turtle import *
    
    penup()
    shape('circle')
    speed(1)
    hideturtle()
    
    for n in range(10):
    	stamp()
    	goto(20*n,20*n)
    input("Press enter to exit")
    
    Tu peux régler la vitesse, la forme, la taille... Le zoom aussi sûrement.


    Avec matplotlib c'est un peu plus pénible ( il y a peut-être moyen de faire plus simple, je ne suis pas un expert avec cet bibli) :
    import numpy as np
    import matplotlib.pyplot as plt
    from time import sleep
    from math import sqrt
    
    WIDTH = 10
    HEIGHT = 10
    HOT_POINT = HOT_POINT_X, HOT_POINT_Y = (0, HEIGHT//2)
    
    
    # matrice qui sera affiché à l'écran
    img = np.zeros((WIDTH, HEIGHT))
    
    show_obj = plt.imshow(img, cmap='gray', vmin=0, vmax=255)
    plt.ion()
    fig = plt.figure()
    plt.show()
    for t in range(1, 10):
    	# on calcule la nouvelle matrice
    	img[t, t] = 255
    	
    	# on met à jour le tableau affiché
    	show_obj.set_array(img)
    	# on redessine
    	fig.canvas.draw()
    	sleep(0.1) # 0.1 secondes
    
    plt.ioff()
    input("Press enter to exit")
    

    Ce code fonctionne très bien sous linux (en tout cas Debian et Ubuntu), mais mes élèves n'avaient pas réussi à le faire fonctionner sous windows. Ils avaient utilisé http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/ (premier lien google parlant de AnimFunc.

    Si tu veux faire des trucs qui bougent, je pense que Turtle est beaucoup plus adapté. On peut mettre plusieurs tortues sur la piste, c'est assez ludique. Après si c'est pour afficher des données scientifiques, oui Matplotlib c'est mieux.
  • Effectivement, on peut faire plus simple :
    import matplotlib.pyplot as plt
    
    x = [3,4,6,4,3,2,0,2,3]   # liste des abscisses des points à placer
    y = [0,2,3,4,6,4,3,2,0]   # liste des ordonnées des points à placer
    
    plt.plot(x, y)  # calcule le graphique
    plt.show()     # affiche le graphique
    

    Par défaut, "plot" relie les points... mais on peut lui demander de faire autrement.
    Je t'invite à lire la documentation à ce sujet.


    Edit : Oups, en relisant le titre, je m'aperçois que je réponds sans doute à côté de la plaque. Désolé... je laisse tout de même : cela peut aider quelqu'un d'autre.
  • Merci ça marche!
    En fait utilisateurs de spyder pour info: si on exécute dans la console ce n'est jamais dynamique.
    Il faut aller dans préférences et choisir d'exécuter dans une fenêtre externe.
    Sous Linux ça marche bien, en revanche sur mac Os, ça ne marche pas en compilant depuis spyder.
    Ca m'a pris du temps pour comprendre.
    Au passage je trouve que la commande random de numpy n'est pas très random du tout!

    Mauricio
Connectez-vous ou Inscrivez-vous pour répondre.