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

Python Discussion :

Problème pour faire une heatmap Hexagonal à partir d'une matrice de densité


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Janvier 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 11
    Par défaut Problème pour faire une heatmap Hexagonal à partir d'une matrice de densité
    Bonjour,
    Je voudrais faire un graphique qui fait correspondre à l'intensité d'une grandeur variable une gamme de tons en python.
    Le problème c'est que j'ai une matrice de densité et j'aimerais le faire avec des cellules hexagonales.
    Je sais utiliser pcoloc pour le faire avec des cellules carrés.

    J'ai vu que l'on pouvait utiliser hexbin, le problème c'est que cette fonction utilise un histogramme 2-D pour faire le graphique hors moi j'ai une matrice d'intensité.

    Pouvez vous m'aider?
    Merci beaucoup

    Je vous mets ci dessous un code pour hexbin

    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 numpy as np
    import matplotlib.pyplot as plt
     
    np.random.seed(0)
    n = 100000
    x = np.random.standard_normal(n)
    y = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n)
    xmin = x.min()
    xmax = x.max()
    ymin = y.min()
    ymax = y.max()
     
    fig, axs = plt.subplots(ncols=2, sharey=True, figsize=(7, 4))
    fig.subplots_adjust(hspace=0.5, left=0.07, right=0.93)
    ax = axs[0]
    hb = ax.hexbin(x, y, gridsize=50, cmap='hot')
    ax.axis([xmin, xmax, ymin, ymax])
    ax.set_title("Hexagon binning")
    cb = fig.colorbar(hb, ax=ax)
    cb.set_label('counts')
     
    ax = axs[1]
    hb = ax.hexbin(x, y, gridsize=50, bins='log', cmap='hot')
    ax.axis([xmin, xmax, ymin, ymax])
    ax.set_title("With a log color scale")
    cb = fig.colorbar(hb, ax=ax)
    cb.set_label('log10(N)')
     
    plt.show()

  2. #2
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Janvier 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 11
    Par défaut
    Bonjour je me permets de relancer cette discussion, j'ai trouvé une solution qui ne me convient pas pour répondre au problème.

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    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 : 662
    Par défaut
    Salut,

    Un peu comme ceci (tiré et adapté de stackoverflow))?
    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
    from matplotlib import pyplot as plt
    from matplotlib import mlab
    import numpy as np
     
    n = 1e5
    x = y = np.linspace(-5, 5, 100)
     
    # Build a grid (must be adapted)
    X, Y = np.meshgrid(x, y)
     
    # Build densities
    Z1 = mlab.bivariate_normal(X, Y, 2, 2, 0, 0)
    Z2 = mlab.bivariate_normal(X, Y, 4, 1, 1, 1)
    ZD = Z2 - Z1
     
    gridsize=30
    plt.subplot(111)
     
    plt.hexbin(X.ravel(), Y.ravel(), C=ZD.ravel(), gridsize=gridsize, bins=None)
    plt.axis([x.min(), x.max(), y.min(), y.max()])
     
    cb = plt.colorbar()
    cb.set_label('mean value')
    plt.show()
    J

  4. #4
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Janvier 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 11
    Par défaut
    Salut, c'est ce genre de figure que je veux obtenir mais lorsque j'entre ma matrice à la place de C=ZD... le programme ne marche plus je ne comprends pas très bien.
    ZD n'est pas une matrice de densité?
    Merci pour ta réponse,

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    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 : 662
    Par défaut
    Salut,

    le programme ne marche plus
    Vous conviendrez que cette phrase de véhicule pas beaucoup d'information. Ne "marche pas" ne veut pas dire grand chose. Qu'est-ce que vous obtenez? Qu'est-ce que vous avez en sortie si vous affichez votre matrice, et si vous affichez ZD?

    J

  6. #6
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Janvier 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 11
    Par défaut
    Bonjour,

    L'erreur mise est :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       RuntimeError                              Traceback (most recent call last)
    <ipython-input-485-8d3e24a0a252> in <module>()
    ----> 1 cb = plt.colorbar()
     
    /usr/lib64/python2.7/site-packages/matplotlib/pyplot.pyc in colorbar(mappable, cax, ax, **kw)
       2227         mappable = gci()
       2228         if mappable is None:
    -> 2229             raise RuntimeError('No mappable was found to use for colorbar '
       2230                                'creation. First define a mappable such as '
       2231                                'an image (with imshow) or a contour set ('
     
    RuntimeError: No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf).
    Faut-il que la matrice soit entre 0 et 1?

    Merci,

Discussions similaires

  1. [AC-2010] Problème pour filtrer un sous-formulaire à partir d'une requête en VBA
    Par Thugann dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/06/2014, 10h10
  2. Réponses: 4
    Dernier message: 10/10/2010, 11h46
  3. Réponses: 2
    Dernier message: 05/03/2010, 14h15
  4. Réponses: 1
    Dernier message: 01/10/2008, 21h34
  5. [URL] problème pour créer un url a partir d'une adresse relative
    Par luckyvae dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/10/2007, 11h37

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