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 :

utilisation de imshow


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Mars 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 44
    Par défaut utilisation de imshow
    Bonjour,

    je trace un graphique prenant en compte trois variables : 'tabTime' en abscisse, 'TabAlt' en ordonnée et 'tabDiff' pour colorbar :

    Nom : Seasonal variability Difference interpolate.png
Affichages : 244
Taille : 108,8 Ko

    Pour ce graphique j'utilise un scatterplot :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    import matplotlib.pyplot as plt
    import numpy as np
    import glob
    from datetime import datetime
    from numpy import arange
    import matplotlib.dates as mdates
     
    tabTime = np.zeros(0)
    tabAlt = np.zeros(0)
    tabDiff= np.zeros(0)
    tabfile=np.zeros(0)
     
     
     
    ext="Diff_*"
    for files in sorted(glob.glob(ext),reverse=False):
        print(files) 
        filename=(files[5:9])
        print(filename)
     
     
     
        data = np.loadtxt(files)
        alt = data[:,0]  
        diff = data[:,1]
        NumberOfLine = len(alt)
        tabAlt = np.append(tabAlt,alt)
        tabDiff = np.append(tabDiff, diff)
     
     
        a = filename
        tabfile = np.append(tabfile,a)
     
        for i in range(len(alt)):
            tabTime = np.append(tabTime,a)
     
     
     
    plt.scatter(tabTime, tabAlt, marker='.', c=tabDiff, cmap='RdBu') 
    plt.xticks(rotation=45)
     
    plt.xticks([tabfile[0],tabfile[14], tabfile[30], tabfile[46],tabfile[60]],[' July 01',' July 15 ','Aug 01','Aug 15','Aug 31'])
     
    plt.xlabel('Date')
    plt.ylabel('Altitude (km)')
    cbar = plt.colorbar()
    cbar.set_label('O3`non AMA` - O3`AMA`  (ppmv)')
    plt.show()
    Mais comme vous pouvez le voir, scatter me place des gros points sur mes données, assez gros pour rendre difficile la lecture du graphique de manière précise.
    C'est pourquoi j'essaye de tracer des pixels au lieu de gros points.

    Sauriez-vous comment faire pour ça ?
    J'ai essayé de voir avec imshow mais je ne vois pas comment adapter mon code à la syntaxe de imshow.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par GlmGil Voir le message
    assez gros pour rendre difficile la lecture du graphique de manière précise.
    Avec en ordonnées des graduations tous les 2 kilomètres et en abscisses une graduation par quinzaine, quelle précision cherchez vous à obtenir?
    Regardez aussi les exemples de matplotlib ou un tuto. sur l'utilisation de matplotlib pour les datasciences: il faut peut être approcher le problème autrement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Mars 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 44
    Par défaut
    Salut,

    Alors le problème dans mon graphe est qu'avec scatter, j'ai tellement de points très rapprochés que je me retrouve avec certains points qui se superposent quasiment :

    Nom : Interannual variability Augday.png
Affichages : 170
Taille : 508,7 Ko

    Par exemple les points rouges sombres entre 12 et 14km sont peu visibles parce que d'autres points sont placés assez proches.
    Ce qu'il me faudrait c'est des marker à chaque endroit qui ne se superposent pas. J'ai bien pensé à réduire la taille des points mais j'ai toujours cette superposition :

    Nom : Interannual variability Augday.png
Affichages : 196
Taille : 464,4 Ko

  4. #4
    Membre Expert

    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
    Par défaut
    Plusieurs pistes :

    1) En continuant avec scatter :
    - vous pouvez changer le style de point. Le prendre carré serait mieux que rond pour éviter les chevauchements
    - vous pouvez continuer à en modifier la taille, en réduisant de plus en plus
    - enlever également le pourtour du point s'il y en a un (edge)

    2) Passer sous imshow peut être une bonne idée oui, mais ça implique un traitement avant pour construire la matrice à afficher. Si vos points sont déjà bien aligné comme sur une grille alors c'est assez facile, sinon il vous faudra mettre une couche d'interpolation, car 1 pixel de l'image final, sera la moyenne (ou le max selon vos besoins) des points qui seront contenu dans ce pixel.

  5. #5
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Mars 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 44
    Par défaut
    J'ai continué avec scatter comme dans tes conseils, en changeant le marker par des pixels :

    Nom : Interannual variability 1stdataday pix.png
Affichages : 158
Taille : 300,1 Ko


    J'aurais juste une question : est-ce qu'il est possible d'ajouter un contourplot sur cette figure, à partir des données de ma liste 'tabDiff' que j'utilise pour les couleurs ?




    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    import matplotlib.pyplot as plt
    import numpy as np
    import glob
    from datetime import datetime
    from numpy import arange
    import matplotlib.dates as mdates
    tabTime = np.zeros(0)
    tabAlt = np.zeros(0)
    tabDiff= np.zeros(0)
    tabfile=np.zeros(0)
     
     
    ext="Diff_*"
    for files in sorted(glob.glob(ext),reverse=False):
        print(files) 
        filename=(files[5:12])
        print(filename)
     
     
     
        data = np.loadtxt(files)
        alt = data[:,0]  
        diff = data[:,1]
        NumberOfLine = len(alt)
        tabAlt = np.append(tabAlt,alt)
        tabDiff = np.append(tabDiff,diff)
     
     
        a = filename
        tabfile = np.append(tabfile,a)
     
        for i in range(len(alt)):
            tabTime = np.append(tabTime,a)
     
     
     
    plt.scatter(tabTime, tabAlt, s=4,marker=',', c=tabDiff, cmap='RdBu') 
    plt.xticks(rotation='vertical')
    #plt.locator_params(axis='x', nbins=50)
     
     
     
    plt.xticks([tabfile[0], tabfile[15],tabfile[34],tabfile[62],tabfile[95],tabfile[124],tabfile[159],tabfile[185],tabfile[214],tabfile[235],tabfile[262],tabfile[295],tabfile[317]],['2007 July 19','2008 July 17','2009 July 01','2010 July 01','2011 July 05','2012 July 03','2013 July 03','2014 July 02','2015 July 22','2016 July 01','2017 July 03','2018 July 02','2019 July 12' ])
     
    plt.xlabel('Date')
    plt.ylabel('Altitude (km)')
    cbar = plt.colorbar()
    cbar.set_label('O3`non AMA` - O3`AMA`  (ppmv)')
    plt.grid(linestyle='--', linewidth=0.7)
    plt.savefig('Interannual variability 1stdataday pix.png', dpi=200,bbox_inches = 'tight',pad_inches = 0)
    plt.show()

  6. #6
    Membre Expert

    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
    Par défaut
    https://matplotlib.org/stable/galler...rdatagrid.html

    Et si vos points sont bien alignés, et bien c'est encore plus facile. C'est comme pour imshow, il faut reconstruire vos données sous la formes d'une matrice décrivant ce qui se passe dans le plan de l'image.

Discussions similaires

  1. Problème Utilisation de Imread, Imshow
    Par OSryx dans le forum Scilab
    Réponses: 1
    Dernier message: 23/12/2013, 11h22
  2. Réponses: 4
    Dernier message: 05/02/2010, 19h02
  3. Utilisation fonction imshow sur une partie d'une matrice
    Par bertrand42300 dans le forum Images
    Réponses: 2
    Dernier message: 25/04/2009, 11h30
  4. Probleme utilisation imshow
    Par kethmoon dans le forum Images
    Réponses: 8
    Dernier message: 15/01/2008, 16h23
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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