IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Nuances de couleurs des points d'une courbe matplotlib


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Points : 31
    Points
    31
    Par défaut Nuances de couleurs des points d'une courbe matplotlib
    Bonjour,
    Je voudrais afficher la projection d'une courbe 3D dans un plan, en figurant la troisième dimension par des nuances de couleur. Autrement dit chaque point est susceptible d'avoir une couleur différente. La courbe peut comporter un très grand nombre de points, plus de 100000 par exemple. Est-ce qu'il existe une solution simple et rapide, ou juste rapide ?
    Merci à tous pour votre aide.

  2. #2
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 53
    Points
    53
    Par défaut
    Avec numpy et matplotlib :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import numpy as np
    import matplotlib.pyplot as plt
     
    xvec = np.linspace(-5.,5.,100)
    x, y = np.meshgrid(xvec, xvec)
    z = np.cos(x ** 2 + y ** 2) / (x ** 2 + y ** 2 + .5)
     
    plt.contourf(x, y, z, 100)
    plt.colorbar()
    plt.show()

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Points : 31
    Points
    31
    Par défaut
    Merci he2lo pour votre réponse, et désolé qu'elle soit si tardive ; je ne l'avais pas remarquée.

    Ce que fait votre code, c'est représenter la troisième dimension d'une surface par une couleur. Moi ce que j'aimerais, c'est colorer une ligne, dans un espace 3d. Par exemple la courbe paramétrée x= cost ; y=sint ; z=cos(5t). Je voudrais la représenter dans le plan (x,y), mais avec une couleur qui dépend de z. Je pourrais bien sûr passer par le code joint, mais c'est très long (même avec 500 points, et ma courbe en a 500000. C'est le résultat d'une simulation numérique), et très moche. Il doit y avoir beaucoup mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import numpy as np
    import matplotlib.pyplot as plt
     
    for t in np.arange(0,6.28,0.01):
        z=np.cos(5*t)
        bleu=z**2
        plot([np.cos(t)],[np.sin(t)],'.',color=(0,0,bleu))

  4. #4
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 53
    Points
    53
    Par défaut
    Je voudrais afficher la projection d'une courbe 3D dans un plan, en figurant la troisième dimension par des nuances de couleur.
    Autant pour moi, j'avais pas bien fait attention.

    Pour ~ 600 000 points, une minute de calcul pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import numpy as np
    import matplotlib.pyplot as plt
     
    x = np.empty((int(2 * np.pi / .1e-4)+1,))
    y = np.empty((int(2 * np.pi / .1e-4)+1,))
    z = np.empty((int(2 * np.pi / .1e-4)+1, 3))
    i = 0
    for t in np.arange(0, 2 * np.pi, .1e-4):
        x[i] = np.cos(t) * np.sqrt(4 * np.sin(2 * t))
        y[i] = np.sin(t) * np.sqrt(4 * np.sin(2 * t))
        z[i] = [np.cos(t) % 1, .0, .0]
        i += 1
    plt.scatter(x, y, marker='.', color=z)
    plt.show()

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Points : 31
    Points
    31
    Par défaut La fonction scatter, l'essayer c'est l'adopter !
    Merci He2lo !

    la fonction scatter est le genre de truc que je cherchais, et le temps de calcul reste raisonnable. Problème résolu donc.

  6. #6
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 53
    Points
    53
    Par défaut
    version vectorisée (plus rapide):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import numpy as np
    import matplotlib.pyplot as plt
     
    x = np.empty((int(2 * np.pi / .1e-4)+1,))
    y = np.empty((int(2 * np.pi / .1e-4)+1,))
    z = np.zeros((int(2 * np.pi / .1e-4)+1, 3))
    t = np.arange(0, 2 * np.pi, .1e-4)
     
    x = np.cos(t) * np.sqrt(4 * np.sin(2 * t))
    y = np.sin(t) * np.sqrt(4 * np.sin(2 * t))
    z[: ,0] = np.cos(t) % 1
     
    plt.scatter(x, y, marker='.', color=z)
    plt.show()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/05/2014, 16h24
  2. relier des points par une courbe
    Par lisenette dans le forum MATLAB
    Réponses: 3
    Dernier message: 20/03/2014, 12h27
  3. Réponses: 0
    Dernier message: 27/03/2013, 02h57
  4. Comment trouver les points des inflections pour une courbe
    Par mihaispr dans le forum Mathématiques
    Réponses: 3
    Dernier message: 30/09/2009, 14h25
  5. Relier des points dans une paintbox par une courbe
    Par Benjikos dans le forum Débuter
    Réponses: 4
    Dernier message: 19/08/2007, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo