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 :

Matplotlip pcolormesh : refaire un diagrame x=alphabet, y=alphabet , z= proba lettre suivante [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut Matplotlip pcolormesh : refaire un diagrame x=alphabet, y=alphabet , z= proba lettre suivante
    Bonjour,

    J'essai de refaire ( en débutant), un "déchiffrement MCMC"
    (vu sur cette vidéo "www.youtube.com/watch?v=z4tkHuWZbRA" de la (super) chaine de David Louapre).

    J'ai préparé le texte du livre "Swan" (proposé par Mr Louapre sur son GitHub),
    pour recueillir, dans une liste, les probabilités d'apparition d'une lettre (espace inclus i.e. 27 chars) après un autre.
    Ainsi j'arrive à une liste de 729 sous-listes du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stat = [['  ', 4.21],[' a', 135.23],[' b', 56.12],....['zz', 4.00]]
    Puis, voyant ce joli "diagramme thermique" sur la vidéo..
    Nom : Capture.JPG
Affichages : 193
Taille : 25,0 Ko
    j'ai essayé de voir comment faire avec les explications trouvées sur https://matplotlib.org/stable/galler...sh_levels.html
    Sauf que j'ai bricolé, cherché, rebricolé.. sans arriver à reproduire ce diagramme x=caractères(27), y=caractères(27), z=proba(729).

    Pourriez-vous m'aider a comprendre ce qu'il faut apporter/dire à matplotlib pour avoir ce type de diagramme x,y avec échelle de couleur selon z?
    Merci pour votre temps.
    Jma
    Images attachées Images attachées  

  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
    En fait, stocker stat, sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stat = [['  ', 4.21],[' a', 135.23],[' b', 56.12],....['zz', 4.00]]
    va être un peu difficile à exploiter. Il faut modifier cela pour avoir une représentation sous forme de matrice, que vous pourrez ensuite aisément afficher avec la fonction imshow ou matshow de matplotlib.

    Exemple de mise sous forme de matrice, avec seulement 2 lettres, l'espace et le '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
    characters = ' a'
    stat = [['  ', 4.21],[' a', 135.23],['a ', 56.12],['aa', 4.00]]
    print(stat)
     
    stat = dict(stat)  ## le dictionnaire est déjà un peu plus facile à exploiter
    print(stat)
     
    n = len(characters)
    A = np.zeros((n,n))
     
    for i in range(n):
        for j in range(n):
            A[i,j] = stat[characters[i]+characters[j]]
     
    print(characters)
    print(A)
    Vous avez donc la matrice A, à afficher avec matplotlib, et si vous voulez légender les axes, et bien la légende se trouve tout simplement dans characters

  3. #3
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Bonjour LG et merci pour votre aide

    Je trouve jolie cette façon de faire avec le dico.
    Donc j'ai (grâce à vous) l'axe Z avec ce tableau 2D de valeurs.

    Pour le diagramme, j'ai vu sur le cite de matplotlib:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import matplotlib.pyplot as plt
    from matplotlib.colors import BoundaryNorm
    from matplotlib.ticker import MaxNLocator
    import numpy as np
     
    np.random.seed(19680801)
    Z = np.random.rand(6, 10)
    x = np.arange(-0.5, 10, 1)  # len = 11
    y = np.arange(4.5, 11, 1)  # len = 7
     
    fig, ax = plt.subplots()
    ax.pcolormesh(x, y, Z)
    qui donne:
    Nom : Capture.PNG
Affichages : 141
Taille : 8,5 Ko

    j'essai de reproduire, pour mon mimer mon cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.colors import BoundaryNorm
    from matplotlib.ticker import MaxNLocator
     
    np.random.seed(19680801)
    x = np.arange(-0.5, 27.5, 1 )
    y = np.arange(-0.5, 27.5, 1 )
    Z = np.random.rand(27,27)
     
    fig, ax = plt.subplots()
    ax.pcolormesh(x, y, Z)
    mais j'obtiens des cases rectangulaires et non carrées.
    Nom : Capture2.PNG
Affichages : 144
Taille : 17,6 Ko

    Y a t il un moyen de faire que les cases soient en carrés?

    Bonne journée

  4. #4
    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
    Qqch comme ax.set_aspect('equal') devrait correspondre à vos besoins

  5. #5
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Super beaucoup LG! merci c'est exactement ce qu'il fallait..

    Du coup j'arrive a un truc comme ça sur les 729 data:
    Nom : Capture3.PNG
Affichages : 149
Taille : 38,6 Ko

    encore merci pour votre aide
    Images attachées Images attachées  

  6. #6
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Finalement, puisque ce fil a le mérite d'exister, je me permet une nouvelle question .

    Sur le "bigramme" original de Mr Louapre: Il montre les x en haut, espace a gauche et le y a gauche espace en haut.
    Perso j' suis arrivé avec x en bas espace a gauche et y a gauche avec espace en bas.

    En somme il commence de positionner les valeurs de sa matrice dans coin haut gauche de la grille et moi dans le coin bas gauche.

    Existe t'il un moyen, quand on se trouve dans mon cas, pour retrouver la position des axes de Mr Louapre?

    Bonne journée.
    Jma

  7. #7
    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
    L'auteur doit plutôt utiliser la méthode imshow que pcolor. Et cette méthode permet de gérer aussi là ou l'on veut placer l'origine (cf. la notice de la fonction imshow)

  8. #8
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    merci encore et pour tout lg_53

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

Discussions similaires

  1. interclassement : quel alphabet choisir ?
    Par boteha dans le forum Outils
    Réponses: 4
    Dernier message: 22/08/2006, 15h52
  2. Réponses: 4
    Dernier message: 15/09/2005, 13h48
  3. Réponses: 5
    Dernier message: 31/08/2005, 10h05
  4. [CR9] lenteur mise en forme des couleurs dans expert diagram
    Par cdu dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 20/04/2005, 08h48
  5. Quel outil pour diagrame UML pour Java ?
    Par yup dans le forum Outils
    Réponses: 5
    Dernier message: 27/08/2004, 16h24

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