Partage
  • Partager sur Facebook
  • Partager sur Twitter

Customiser les axes avec datetime

Sujet résolu
    3 mai 2021 à 13:37:11

    Bonjour,
    j'ai tracé un graphique représentant des mesures prises à certaines périodes (Juillet-aout) sur plusieurs années : 

    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 :

     
    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!

    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2021 à 17:41:16

      Bonjour.

      Il y a peut-être une bonne piste sur l'exemple "Simple ColorBar" sur le site de Matplotlib.

      • Partager sur Facebook
      • Partager sur Twitter

      PB68

        6 mai 2021 à 10:08:57

        Bonjour, merci pour le conseil je suis allé voir ça!

        de mon côté j'ai réessayé en traçant mon graphe sans passer par datetime comme je le faisait avant pour mon abscisses :

        Mais comme vous le voyez, il y a un affichage de toutes les valeurs.

        Ce qu'il faudrait c'est uniquement afficher quelques valeurs clés (comme le mois de chaque année, au lieu de tous les jours).

        Voici la partie de code que j'ai changé : 

            a = filename
         
            for i in range(len(alt)):
                tabTime = np.append(tabTime,a)
         
        plt.scatter(tabTime, tabAlt, marker='.', c=tabDiff, cmap='RdBu')



        • Partager sur Facebook
        • Partager sur Twitter
          6 mai 2021 à 14:27:06

          Bonjour.

          Si j'ai enfin bien saisi ton idée, tu ne veux faire apparaître que l'année des mesures sur l'axe des x.

          Comme je vois les choses (il y a probablement bien d'autres moyens d'y arriver), il faudrait :

          • Déterminer la proportion de chaque zone de date (nombre de date année 1 / nombre de date total, nombre de date année 2 / nombre de date total, ..., nombre de date année n / nombre de date total).
          • Créer une liste des labels pour l'axe x (année 1, année 2, année n)

          Bien entendu, il doit y avoir autant de proportions que de labels.

          Ensuite, on paramètre l'axe x :

          plt.set_xticks(ta_liste_des_proportions)
          plt.set_xticklabels(ta_liste_des_labels)
          • Partager sur Facebook
          • Partager sur Twitter

          PB68

            11 mai 2021 à 0:02:48

            Bonjour,

            en suivant un petit peu ton idée, j'ai réussi en procédant de cette manière :

            J'ai créé une liste tabfile contenant tous les fichiers à la suite, et je leur ai assigné (à chaque index) un label :

            plt.xticks([tabfile[0],tabfile[9], tabfile[18], tabfile[28],tabfile[200]],['2007 July','2007 Aug','2008 July','2008 Aug','2010'])

            Et ça semble plutôt fonctionner :)

            -
            Edité par GiLlgm 11 mai 2021 à 0:04:56

            • Partager sur Facebook
            • Partager sur Twitter
              11 mai 2021 à 10:15:33

              Bonjour.

              Cool, problématique résolue alors ???

              • Partager sur Facebook
              • Partager sur Twitter

              PB68

                12 mai 2021 à 14:39:08

                Bonjour

                Oui c'est bien résolu !

                Merci!

                • Partager sur Facebook
                • Partager sur Twitter

                Customiser les axes avec datetime

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown