Carte de densité avec python
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Carte de densité avec python



  1. #1
    Setz

    Carte de densité avec python


    ------

    Bonjour,

    Je débute en python, ainsi j'aimerais savoir s'il existait un moyen de tracer une carte de densité (ou un histogramme 2D) avec python ?

    Typiquement partant de 3 tableaux : un tableau x et un tableau y (qui repèrent ma position sur la carte) et un tableau z qui indique la valeur que je veux donner au point (x,y) j'aimerais obtenir la carte des valeurs du tableau z dans le plan (x,y).

    Merci bien !

    -----

  2. #2
    Setz

    Re : Carte de densité avec python

    Bien, après moultes et moultes recherches j'ai trouvé ce que je cherchais. A partir des coordonnées x,y et des valeurs d'intensité z correspondantes le résultat peut être obtenu par :

    X,Y = np.meshgrid(x, y)
    plt.pcolormesh(X,Y,z)
    plt.colorbar()
    plt.show()

    Tout simplement...
    La discussion peut être considérée comme résolue.

  3. #3
    Setz

    Re : Carte de densité avec python

    UP !

    En fait je me rends compte que ma commande ne fait pas du tout ce que je veux.
    La discussion est de nouveau ouverte.

    Pour rappel, j'ai 3 tableaux de valeurs x,y,z et je voudrais créer une carte de densité/heatmap avec barre de couleur telle qu' au point de valeur x[i], y[i] la couleur corresponde à la valeur de z[i] pour tout i.

    Si quelqu'un sait comment faire je suis preneur, merci.

  4. #4
    minushabens

    Re : Carte de densité avec python

    tu veux interpoler les valeurs (x,y,z), ou bien tu veux une estimation de la densité (la densité des points (x,y) pas de z dans ce cas)?

  5. A voir en vidéo sur Futura
  6. #5
    Setz

    Re : Carte de densité avec python

    Je souhaite interpoler les valeurs de x,y et z. Pour l'instant j'ai déjà un code qui me permet d'afficher des points dont la couleur dans le plan (x,y) est donné par la valeur de z:

    import numpy as np
    import matplotlib.pyplot as plt


    x,y,z, = np.loadtxt('gamma.txt', unpack = True)
    fig, ax0 = plt.subplots()



    im0 = plt.scatter(x,y,s=1,c=z, cmap='bwr')
    cbar = fig.colorbar(im0,ax=ax0)


    ax0.set_title("Your title")
    plt.xlabel("xlabel")
    plt.ylabel("ylabel")


    Mais je souhaiterai modifier ce code pour faire une interpolation entre les points et obtenir une carte de densité comme du même style que la première figure qui se trouve sur cette page : https://stackoverflow.com/questions/...nging-y-values

    J'ai essayé de passer par imshow avec le code suivant :

    import numpy as np
    import matplotlib.pyplot as plt


    x,y,z = np.loadtxt('gamma.txt', unpack = True)
    fig, ax0 = plt.subplots()

    cmap = plt.get_cmap('viridis')
    im0 = ax0.imshow(x,y,z, cmap=cmap, interpolation="gaussian")

    cbar = fig.colorbar(im0,ax=ax0)


    ax0.set_title("Your title")
    plt.xlabel("xlabel")
    plt.ylabel("ylabel")

    Mais je ne crois que je ne comprends pas bien comment fonctionne imshow car cela me renvoit une erreur, il me semble que imshow nécessite des grilles en entrée et qu'il faudrait donc utiliser une instruction de type : X,Y = np.meshgrid(x, y) mais de même je ne maitrise pas bien meshgrid et là encore ça ne fonctionne pas.
    Par ailleurs je crois m'être mal exprimé, mes tableaux x et y ne sont pas des linspace qui définissent le plan(x,y) mais plutôt des points de coordonnées auxquels correspond une valeur de densité z
    Dernière modification par Setz ; 11/03/2020 à 11h47.

  7. #6
    minushabens

    Re : Carte de densité avec python

    une interpolation n'est pas une densité!

    regarde:

    https://docs.scipy.org/doc/scipy-0.1....interp2d.html

  8. #7
    Setz

    Re : Carte de densité avec python

    Je reconnais ne pas résussir à appliquer l'exemple qui se trouve dans le lien envoyé à partir de mes données dans le sens où mes tableaux x et y sont juste des points de coordonnées avec des valeurs irrégulières par exemple : x[-266, 34 , 12, ...] y = [33 , 23, -100,...] et z l'intensité correspondante : z = [13, 33, 100, ..]

    et je voudrais qu'au point [-266, 33] soit affectée la valeur d'intensité z = 13 , au point [34, 23] soit affectée la valeur z = [33] etc puis interpoler pour paver tout l'espace allant de (xmin ->xmax, ymin -> ymax)

    L'objectif est à la fin d'obtenir une carte de densité à partir des données interpolées.
    Dernière modification par Setz ; 11/03/2020 à 13h13.

  9. #8
    minushabens

    Re : Carte de densité avec python

    tu es têtu! ce que tu veux faire est de l'interpolation, ça n'a rien à voir avec une estimation de la densité.

  10. #9
    Setz

    Re : Carte de densité avec python

    Si j'appelle z la densité j'aurai tendance à penser que ce ce que je trace es une carte de densité ou heatmap, l'objectif étant d'obtenir une figure de ce type : https://stackoverflow.com/questions/...nging-y-values
    Mais peu importe le nom si tu sais comment procéder je veux bien ton aide

  11. #10
    Setz

    Re : Carte de densité avec python

    J'ai testé le code suivant :

    Code:
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.interpolate import griddata
    
    xi,yi,zi, Ex, Ey = np.loadtxt('gamma.txt', unpack = True)
    
    xmin = np.min(xi)
    xmax = np.max(xi)
    ymin = np.min(yi)
    ymax = np.max(yi)
    
    
    x = np.linspace(xmin, xmax, 1000)
    y = np.linspace(ymin, ymax, 1000)
    
    X, Y = np.meshgrid(x, y)
    
    grid_z0 = griddata((xi,yi), zi, (X,Y), method = 'cubic')
    
    plt.figure()
    plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
    plt.title('Nearest')
    plt.show()
    Mais l'interpolation semble beaucoup trop grossière et je ne sais pas comment améliorer le résultat.
    Dernière modification par JPL ; 11/03/2020 à 13h49. Motif: Ajout de la balise Code (#)

  12. #11
    umfred

    Re : Carte de densité avec python

    en augmentant la valeur dans les linspace() peut-être

  13. #12
    Setz

    Re : Carte de densité avec python

    J'ai testé d'augmenter la valeur du linspace mais le résultat est le même. Au final je pense surtout que je n'ai pas assez de point de données pour effectuer une interpolation correcte.

    Merci pour votre aide

Discussions similaires

  1. [Python] subprocess, lancer un autre programme avec python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 30/11/2016, 18h56
  2. python et carte interactive
    Par invite6869f62e dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 14/07/2014, 18h53
  3. problème avec TinkerForge avec python
    Par invite1066d387 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 02/07/2012, 15h58
  4. Réponses: 2
    Dernier message: 05/05/2012, 12h29
  5. [Biochimie] Diffraction rayons X/ carte de densité (petite question)
    Par invite9f31e17a dans le forum Biologie
    Réponses: 0
    Dernier message: 23/02/2012, 17h41