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 :

Création image matrice niveau de gris


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Par défaut Création image matrice niveau de gris
    Bonjour bonjour,
    je vous explique mon problème, je travaille pour mon stage (de Master 2 en physique théorique) en réseaux complexes sur des données de contacts d'un lycée. Dans un tableau (matrice de contact) j'ai des données de ce type (qui correspondent aux nombres de contacts entre chaque classe) (mon tableau ne comprend que les nombres et pas 'classe 1','classe2'...):
    _________classe 1_____classe 2______classe 3
    classe 1____1276_______867__________523
    classe 2____867_______1512__________433
    classe 3____523________433_________1345

    J'aimerais représenter ces données dans des matrices de contacts à niveaux de gris : blanc pour le plus grand nombre et noir pour le plus petit avec des niveaux de gris entre les deux, avec l'échelle sur le côté, de sorte on verrait bien se démarquer la diagonale puisque les contacts sont plus importants à l'intérieur d'une classe. J'ai 2 exemples, je préfèrerais pouvoir réaliser le premier, avec les nombres dans les cases, en plus de la couleur mais sinon le deuxième ce serait super aussi. Ces deux exemples sont tirés de deux articles de mon tuteur de stage, malheureusement c'est son co-auteur italien qui a réalisé les matrices de contacts en niveaux de gris et lui ne sait pas comment faire.
    J'ai cru comprendre qu'il fallait utiliser numpy et matplotlib mais bon je ne connais absolument pas ces deux packages et donc je suis un peu perdu sur la manière de procéder, ça fait aussi seulement 2 mois que je programme en python donc je suis encore loin de me considérer comme une initiée!


    Merci d'avance

    Julie
    Images attachées Images attachées   

  2. #2
    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 Julie.
    Je sais faire ç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
     
    A = np.array( [[1276, 867, 523], [867, 1512, 433], [523, 433, 1345]], dtype=np.int)
     
    plt.imshow(A, interpolation='none', cmap=plt.gray() )
    plt.colorbar()
     
    tick_lbls = [ 'classe 1', 'classe 2', 'classe 3' ]
    plt.xticks( np.arange(len(tick_lbls)), tick_lbls)
    plt.yticks( np.arange(len(tick_lbls)), tick_lbls)
     
    nbl, nbc = A.shape
    for i in np.arange(nbl):
        for j in np.arange(nbc):
            plt.text( x=i, y=j, s=A[i,j], color='red')
     
    plt.show()
    Il faut jouer avec les options pour finir.

  3. #3
    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
    J'ai ajouté les options.

    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
    import numpy as np
    import matplotlib.pyplot as plt
     
    A = np.array( [[1276,  867,  523],
                   [ 867, 1512,  433],
                   [ 523,  433, 1345]], dtype=np.int)
     
    plt.imshow(A, interpolation='none', cmap=plt.gray() )
     
    nb = 3
    tick_lbls = [ 'CLASSE ' + str(i+1) for i in np.arange(nb)]
    plt.xticks( np.arange(nb), tick_lbls)
    plt.yticks( np.arange(nb), tick_lbls)
     
    couleur = ['white','black']
    for i in np.arange(nb):
        for j in np.arange(nb):
            plt.text( x=i, y=j, s=A[i,j], color=couleur[i==j],
                      fontsize=16, horizontalalignment='center')
     
    fig = plt.gcf()
    ax = fig.add_axes([0.85, 0.5, 0.04, 0.4])
    plt.colorbar( cax=ax )
     
    plt.show()
    Images attachées Images attachées  

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Par défaut Merciiii
    Merci c'est vraiment parfait... J'ai pas pu regarder ça ce week-end, donc je regarderai demain mais ça semble réellement nickel! Merci infiniment!!

    Julie

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Par défaut Un grand merci et une nouvelle question
    Tout d'abord je voudrais dire un immense merci à dardanos!

    Ensuite, j'ai encore quelquechose à demander, j'ai pas mal raffiné le code pour que mes matrices en niveaux de gris soient vraiment "parfaites". Je pourrais avoir fini mais j'ai encore envie de perfectionner tout ça: il se trouve que dans mes matrices j'ai beaucoup de très grands nombres sur la diagonale et plutôt des très petits en dehors, du coup les cases de la diagonale sont bien claires avec des nuances mais le reste de la matrice est presque tout noir puisque les nombres sont petits, du coup j'aimerais faire une échelle logarithmique!
    En gros, qu'il y ait autant de différence de nuances entre 3 et 18 qu'entre 300 et 1800. Ce serait plus adéquat comme représentation.

    Première question : est ce que c'est possible?
    Et si oui, quelqu'un a-t-il la solution?

    Merci d'avance

  6. #6
    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,
    On peut imposer une norme à un imshow :
    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
    # -*- coding:Utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.colors import LogNorm
     
    A = np.array( [[1276,   86,    5],
                   [  86, 1512,   43],
                   [   5,   43, 1345]], dtype=np.int)
     
    #plt.imshow(A, interpolation='none', cmap=plt.gray())
    plt.imshow(A, interpolation='none', cmap=plt.gray(), norm=LogNorm(vmin=1e1, vmax=1e4) )
     
    rgn = np.arange(3)
    tick_lbls = ['CLASSE ' + str(i+1) for i in rgn]
    plt.xticks( rgn, tick_lbls)
    plt.yticks( rgn, tick_lbls)
     
    couleur = ['white','black']
    for i in rgn:
        for j in rgn:
            plt.text( x=i, y=j, s=A[i,j], color=couleur[i==j],
                      fontsize=16, horizontalalignment='center')
     
    fig = plt.gcf()
    ax = fig.add_axes([0.85, 0.5, 0.04, 0.4])
    plt.colorbar(cax=ax)
     
    plt.show()
    Bon week end
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/03/2013, 08h54
  2. Réponses: 8
    Dernier message: 05/05/2009, 08h36
  3. Réponses: 1
    Dernier message: 30/11/2005, 17h12
  4. Réponses: 8
    Dernier message: 17/04/2005, 19h58
  5. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04

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