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 :

Graphique avec scipy ? matplotlib ?


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut Graphique avec scipy ? matplotlib ?
    Bonjour à tous,
    Je dois recréer le même type de graphique que l'image ci dessous.
    Ici, les données représentent la distance relative d'une entité par rapport à un point. On voit que les entités sont la plupart du temps sur le point étudié.
    En dessous, les petits carrés représentent chaque entité, c'est une autre façon de représenter la courbe.
    J'ai plusieurs question :
    1/ Comment puis je couper ma fenêtre graphique en 2, de façon à avoir au dessus, la courbe, et en dessous, les petits carrés représentant les entités ?
    2/ Comment réaliser ces petits carrés ?

    Pour les entités se trouvant sur le point par exemple, je pensais faire un fichier contenant les x et y que je souhaite plotter, et incrémenter le y de façon à ce que les points ne soit pas tous les un sur les autres quand j'ai plusieurs point ayant le même x
    Donc, dans l'image, ci dessous, par exemple, le pic en position 0 a 174 entités donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    0 0.5
    0 1
    .
    .
    .
    .
    0 87
    Comment faire en sorte que mes points soient représentés par des carrés ?

    Merci d'avance pour votre aide,
    Isa
    Images attachées Images attachées  

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    1) pas la peine, affiche l'autre graphique en inversant y !
    2) tu peux specifier le marqueur dans matplotlib

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Ok ok je vais voir ça mais je n'y avais pas pensé

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Salut.
    Je donne un exemple d'une figure avec 2 zones graphiques :
    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
     
    y = np.random.normal( loc=50, scale=5, size=1e3)
     
    plt.subplot(2,1,1)
    classes = np.linspace(0, 100, 20)
    plt.hist(y,bins=classes)
     
    plt.subplot(2,1,2)
    classes = np.arange(0,100,1)
    plt.hist(y,bins=classes)
     
    plt.show()
    Je comprends les représentions comme étant deux histogrammes. La seconde ayant des classes de largeur 1.
    Certes, si tu veux représenter les données avec des carrées, ça n'est pas possible avec un histogramme. Il faut le faire comme un ensemble de points, ta façon de faire marche mais me semble un peu compliquée.
    Pas compris le code de couleurs sur les carrés.

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Je vois ça comme ça :
    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
    import numpy as np
    import matplotlib.pyplot as plt
     
    y = np.random.normal( loc=50, scale=10, size=500)
     
    plt.subplot(2,1,1)
    classes = np.linspace(0, 100, 20)
    plt.hist(y,bins=classes)
     
    plt.subplot(2,1,2)
    classes = np.arange(0,100,1)
    h, bin_edges = np.histogram(y,classes)
    for dist, eff in zip(classes,h):
        for e in np.arange(eff):
            plt.plot(dist,e+1,'sr')
     
    plt.xlim(0,100)
    plt.show()
    Images attachées Images attachées  

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Ah oui effectivement c'est bien plus simple de plotter point par point !
    J'ai un peu modifié :

    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
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import pylab
     
    y = np.random.normal( loc=50, scale=10, size=500)
     
    ax1=plt.subplot(2,1,1)
    classes = np.linspace(0, 100, 20)
    plt.hist(y,bins=classes)
     
     
    #plt.subplot(2,1,2)
    ax2 = plt.subplot(212, sharex=ax1)
    classes = np.arange(0,100,1)
    h, bin_edges = np.histogram(y,classes)
    for dist, eff in zip(classes,h): # distance dans mon histogramme + effectif dans chaque classe
    	for e in np.arange(eff): # np.arrange(3) = array([0, 1, 2])
    		#print "%d,%d : %d" %(dist,eff,e)
    		plt.plot(dist,-e,'sg') # pour qu'il n'y ait pas d'overlappe
     
    plt.xlim(0,100)
    ax1.xaxis.tick_top()
    ax2.axes.get_xaxis().set_visible(False)
    ax2.axes.get_yaxis().set_visible(False)
    plt.setp( ax2.get_xticklabels(), visible=False)
    plt.setp( ax2.get_yticklabels(), visible=False)
    plt.show()
    j'ai mis ce que ça donne en pièce jointe

    Je mettrai le résultat final avec mes données !
    Images attachées Images attachées  

Discussions similaires

  1. Graphique avec matplotlib, probléme d'affichage des boutons
    Par astragoth dans le forum Général Python
    Réponses: 0
    Dernier message: 08/04/2010, 08h27
  2. Graphique avec Turbo Pascal 7
    Par Sagiro dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 21/12/2004, 09h52
  3. [Free Pascal] Graphique avec Dev-Pascal
    Par CompuTux dans le forum Free Pascal
    Réponses: 15
    Dernier message: 03/09/2004, 02h15
  4. Caractéristique des Graphiques avec Tchart
    Par bidson dans le forum XMLRAD
    Réponses: 5
    Dernier message: 19/01/2004, 11h01
  5. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    Réponses: 2
    Dernier message: 16/07/2003, 16h08

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