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 :

customiser les axes avec datetime


Sujet :

Python

  1. #1
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut customiser les axes avec datetime
    Bonjour,
    j'ai tracé un graphique représentant des mesures prises à certaines périodes (Juillet-aout) sur plusieurs années. :

    Nom : Difference LiO3S ECC.png
Affichages : 288
Taille : 44,0 Ko



    Ce graphique n'est pas trop mal mais je voudrais éviter les blancs entre deux tracés, il faudrait donc que les valeurs de Juillet-Aout 2009 soient collées aux valeurs de Juillet-Aout 2010, etc.
    J'ai bien cherché à customiser mon graphique avec xticks mais je ne trouve pas comment l'utiliser pour contraindre l'affichage comme je le veux.

    Voici le code que j'ai actuellement :

    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)
     
     
     
    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 = datetime.strptime(filename, "%y%m%d")
     
        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.xlim((
        datetime.strptime("2007-01-18", "%Y-%m-%d"),
        datetime.strptime("2020-01-30", "%Y-%m-%d"),
        ))
     
    plt.xlabel('Date')
    plt.ylabel('Altitude (km)')
    cbar = plt.colorbar()
    cbar.set_label('O3`AMA` - O3`Non AMA`  (ppmv)')
    plt.show()
    Quelqu'un aurait-il une piste ?

    Merci!

  2. #2
    Membre éprouvé

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

    La solution est sans doute du côté de plt.xticks(). Est-ce que ceci donne quelque chose ?
    J

  3. #3
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Salut!

    Avec ce code voici ce que ça me donne :

    Nom : index.png
Affichages : 245
Taille : 52,5 Ko

    Les valeurs sont juste affichées les unes sur les autres (à la bonne place), mais il y a toujours cet espace blanc entre les tracés qui gène


    Je remets le programme avec ton code :

    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
     
    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)
     
     
     
    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 = datetime.strptime(filename, "%y%m%d")
     
        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((tabTime))
    plt.xlabel('Date')
    plt.ylabel('Altitude (km)')
    cbar = plt.colorbar()
    cbar.set_label('O3`AMA` - O3`Non AMA`  (ppmv)')
    plt.show()

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Si vous voulez rapprocher "artificiellement" les données, il va falloir "tricher" en modifiant les abscisses et en utilisant plt.xticks pour créer des étiquettes de l'axe x qui reprennent les vraies valeurs. Voici les étapes :
    - Faire un tableau des valeurs uniques de Tabtime
    - Remplacer les valeurs par les index des valeurs unique
    Voir la page https://stackoverflow.com/questions/...lues-of-a-list
    - Utiliser plt.xticks([liste des valeurs d'index pertinentes (pas forcément toutes)],[Liste des étiquettes pertinentes (Année, mois, ...) qui vont avec les index pertinents])

    J'espère avoir été clair.
    Bonne journée

  5. #5
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Bonjour ,

    Je vois bien quelle est l'idée derrière la méthode que tu donnes mais je ne vois pas exactement comment l'appliquer,
    J'ai bien un tableau avec les étiquettes de chaque valeur, il m'a suffit de ne pas passer par datetime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        a = filename
     
        for i in range(len(alt)):
            tabTime = np.append(tabTime,a)
     
    plt.scatter(tabTime, tabAlt, marker='.', c=tabDiff, cmap='RdBu')


    j'ai essayé de tracer ça directement et j'ai bien artificiellement rapproché les valeurs (sachant que j'ai besoin de toutes les valeurs, elles sont toutes jugées comme pertinentes dans mon cas)

    Nom : index.png
Affichages : 233
Taille : 96,5 Ko

    mais au lieu d'afficher toutes les étiquettes il faudrait juste en afficher certaines avec un certain intervalle (juste les mois par exemple, au lieu de tous les jours) et pour ça je ne vois pas comment utiliser ta méthode avec plt.xticks.

    Merci pour la réponse

  6. #6
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Finalement je viens de comprendre la méthode que tu as proposé, ça marche très bien, voici un exemple du code que j'utilise pour la dernière partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plt.xticks([tabfile[0],tabfile[9], tabfile[18], tabfile[28],tabfile[200]],['2007 July','2007 Aug','2008 July','2008 Aug','2010'])
    Et ce que ça me donne :

    Nom : index.png
Affichages : 222
Taille : 92,2 Ko

    Merci!

  7. #7
    Membre éprouvé

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

    Pour ma part, le problème n'est pas clair. Je ne pense pas que ce soit une bonne idée de modifier artificiellement l'espacement entre deux "rangées verticales" de points. Cela signifierait que la durée entre deux de ces colonnes serait variable. La galère à déchiffrer, or un graphique sert justement à rendre clair un jeu de données. Et j'ai bien l'impression que c'est vers ça que tu vas. Personnellement, je laisserais l'espace blanc car il a du sens. Ou alors je n'ai rien compris, ce qui est possible.

    Peut être que cet exemple te seras utile.

    J

  8. #8
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Salut Julien,

    en effet en utilisant cette méthode pour modifier artificiellement l'affichage, il faut manuellement chercher chaque index pour le faire correspondre à la bonne date, c'est assez long mais comme il me faut seulement quelques dates précises à afficher je m'en sors bien.

    Autrement c'est mieux de garder l'espacement imposé par datetime, mais mon but était de visualiser précisément la variation du 'signal' entre le rouge et le bleu, et avec les 'blancs' ce n'est pas possible.

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

Discussions similaires

  1. les dates avec Datetime
    Par okoweb dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2013, 17h01
  2. Réponses: 0
    Dernier message: 19/11/2010, 11h52
  3. Copier un objet axes avec les data cursor
    Par 65days dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 17/08/2009, 09h11
  4. Renommer les axes avec la proc gplot
    Par stefsas dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 18/07/2008, 10h34
  5. [XSLT]copie partielle avec condition sur les axes
    Par MasterOfChakhaL dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 13/10/2006, 19h15

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