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

Calcul scientifique Python Discussion :

Taille du graphique à l'échelle


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Taille du graphique à l'échelle
    Bonjour,

    Je vous prie de m'excuser si je ne suis pas assez précis où si je n'ai pas posté ce sujet au bon endroit, je suis débutant sur Python.

    Je cherche à afficher plusieurs courbes sur un même graphique. Ces courbes sont composé de points qui verront leur couleur et leur grosseurs changer en fonction de certains paramètres.
    J'utilise pour cela plt.scatter.

    Je vous laisser une version très épurée de ce que j'ai (c'est relativement simple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    import matplotlib.pyplot as plt
     
    jet=plt.get_cmap('jet')
     
    x = [1,2,3,4]
    y = [1,2,3,4]
    z = [1,1,1,1]
     
    a = [2,3,4,5]
    b = [1,2,3,4]
    c = [2,2,2,2]
     
    d = [6,7,8,9]
    e = [1,2,3,4]
    f = [3,3,3,3]
     
    plt.scatter(x, y, s=100, c=z, vmin=1, vmax=5, cmap=jet)
    plt.scatter(a, b, s=100, c=c, vmin=1, vmax=5, cmap=jet)
    plt.scatter(d, e, s=100, c=f, vmin=1, vmax=5, cmap=jet)
     
    plt.colorbar()
    plt.show()

    Cela me convient bien mais, ce sont des points dans l'espace et j'ai besoin que mon graphique soit à l'échelle, c'est à dire que dans ce cas, le graphique doit être presque deux fois plus large et qu'il n'y ai pas cette compression de l'abscisse (ou de l'ordonnée)
    J'ai beaucoup cherché sur internet, mais je n'ai rien trouvé, pourriez vous m'indiquer le bout de code qu'il manque s'il vous plait? Merci.


    Cordialement,

    Sylvain

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Comment peux-tu espérer représenter des points en 3D, si tu ne passes à la fonction scatter que les coordonnées x et y ?
    Et z alors ?

    Et il est fort probable que t'es recherche google ne t'es mené à rien si tu as cherché un problème d'échelle. C'est un problème de 3D que tu as.

    Regarde ici :
    https://matplotlib.org/gallery/mplot3d/scatter3d.html

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je ne vois pas le problème, je veux juste avoir quelque chose d'orthonormal.
    On peut faire abstraction de la couleur et de la grosseur des points puisque c'est quelque chose que j'ai déjà géré

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Salut,

    Avant de lire la réponse de lg_53 je n'avais pas du tout envisager le problème comme 3D. Alors je vais peut-être sortir une grosse connerie, mais ne cherchez vous pas tout simplement à avoir les deux axes à la même échelle? Si oui il vous suffit de rajouter la ligne plt.axis('equal') avant show().

    Ju

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci pour la réponse, mais cela ne me convient pas exactement.


    Nom : python_1.png
Affichages : 3178
Taille : 13,7 KoNom : python_2.png
Affichages : 3134
Taille : 13,1 Ko

    Je souhaite que les dimensions du graphique puissent varier en fonction de l'echelle proposée

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Hmm. Est-ce que par dimension vous voulez parler des bornes pour les deux axes? Si oui, regardez du côté de plt.xlim(). Si ce n'est pas le cas, navré mais il faudra être plus explicite. Peut être avec un exemple.

    J

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Désolé j'ai été trompé par le changement d'échelle, cela réponds en partie à la problématique ainsi que xlim.
    J'ai ajouté ylim mais cela ne fonctionne pas avec plt.axis('equal')

    la fin de mon code ressemble maintenant à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    import matplotlib.pyplot as plt
    plt.figure(figsize=(10,12))
    jet=plt.get_cmap('jet')
     
    x = [1,2,3,4]
    y = [1,2,3,4]
    z = [1,1,1,1]
     
    a = [2,3,4,5]
    b = [1,2,3,4]
    c = [2,2,2,2]
     
    d = [6,7,8,9]
    e = [1,2,3,4]
    f = [3,3,3,3]
     
    plt.scatter(x, y, s=100, c=z, vmin=1, vmax=5, cmap=jet)
    plt.scatter(a, b, s=100, c=c, vmin=1, vmax=5, cmap=jet)
    plt.scatter(d, e, s=100, c=f, vmin=1, vmax=5, cmap=jet)
     
     
     
     
    plt.colorbar()
    plt.axis('equal')
    plt.xlim(0, 15)
    plt.ylim(0, 3)
     
    plt.show()
    Voici ce que j'obtiens avec en rouge ce que je souhaiterais:

    Nom : python_3.png
Affichages : 3069
Taille : 14,6 Ko

  8. #8
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Ah oui en effet ce n'est pas un problème de 3D. Je croyais, la notation x,y,z m'a induite en erreur.

    Voici une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import matplotlib.pyplot as plt
    plt.figure(figsize=(10,12))
    jet=plt.get_cmap('jet')
     
    x = [1,2,3,4]
    y = [1,2,3,4]
    z = [1,1,1,1]
     
    a = [2,3,4,5]
    b = [1,2,3,4]
    c = [2,2,2,2]
     
    d = [6,7,8,9]
    e = [1,2,3,4]
    f = [3,3,3,3]
     
    plt.scatter(x, y, s=100, c=z, vmin=1, vmax=5, cmap=jet)
    plt.scatter(a, b, s=100, c=c, vmin=1, vmax=5, cmap=jet)
    plt.scatter(d, e, s=100, c=f, vmin=1, vmax=5, cmap=jet)
     
    plt.colorbar()
    plt.gca().set_xlim(0, 15)
    plt.gca().set_ylim(0, 3)
    plt.gca().set_aspect('equal')
     
    plt.show()
     
    sys.exit()
    Les propriétés que vous changez doivent s'appliquer seulement à l'objet Axes que vous manipulez (et c'est ce que vous renvoie plt.gca() pour GetCurrentAxis). Je vous conseillerais plutot de prendre l'habitude de garder accès à vos axes comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fig = plt.figure(figsize=(10,12))
    ax = fig.add_subplot(1,1,1)
     
    ax.scatter(x, y, s=100, c=z, vmin=1, vmax=5, cmap=jet)
    ax.scatter(a, b, s=100, c=c, vmin=1, vmax=5, cmap=jet)
    ax.scatter(d, e, s=100, c=f, vmin=1, vmax=5, cmap=jet)
     
    ax.set_xlim(0, 15)
    ax.set_ylim(0, 3)
    ax.set_aspect('equal')
     
    plt.show()
    même si c'est un peu plus compliqué de gérer le colorbar ensuite, mais là vous trouverez des choses pour cela sur la toile.

  9. #9
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Je vous conseillerais plutot de prendre l'habitude de garder accès à vos axes
    Je suis du même avis. Mais la modification principale c'est l'inversion entre plt.xlim() et plt.axis('equal'). L'ordre ici a de l'importance.

  10. #10
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide

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

Discussions similaires

  1. Graphique avec échelle variable suivant score maximum
    Par ab1to dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 17/02/2010, 13h06
  2. [XL-2007] Graphique à double échelle
    Par ruru9 dans le forum Excel
    Réponses: 1
    Dernier message: 24/08/2009, 16h54
  3. [2.2.2][Chart] taille du graphique dynamique
    Par erwan.bodere dans le forum BIRT
    Réponses: 1
    Dernier message: 28/04/2008, 11h44
  4. Gérer la taille des graphiques avec subplot
    Par timbrochier dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 28/03/2008, 18h33
  5. Affichage d'un TChart (graphique) en échelle logarithmique
    Par stillman dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/04/2007, 17h25

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