Matplotlib : n'afficher que certains labels

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J'utilise matplotlib avec Python et je trace le graphe production = f(date). Seulement, j'ai beaucoup de points (production sur plusieurs années) et les labels se chevauchent sur l'axe des abscisses. Je souhaiterais n'en afficher que certains (que j'aimerais choisir). Pour l'instant le code a cette tête :

 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
def draw_production(self, cow):
    x = []
    y = []

    # Une lactation est une période allant du vêlage (mise à bas) au tarissement 
    # (sorte de congé maternité)
    for lact_key in cow.get_lact_keys():
        lact = cow[lact_key]
        date_pattern = '%Y-%m-%d'

        # Je voudrais afficher le label : lact[AbstractAnalysis.DATES_KEY][0]
        # i.e. la date du premier jour de la lactation
        for date in lact[AbstractAnalysis.DATES_KEY]:
            x.append(datetime.datetime.strptime(date, date_pattern).date())

        y += lact[AbstractAnalysis.PRODS_KEY]

    # http://stackoverflow.com/a/9627970
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter(date_pattern))
    plt.gca().xaxis.set_major_locator(mdates.DayLocator())
    plt.plot(x, y)
    plt.gcf().autofmt_xdate()

    plt.xlabel("Date")
    plt.ylabel("Production")

    # PyLaTeX
    with self.doc.create(Plt(position="htbp")) as plot:
        plot.add_plot(plt, width=r'1\textwidth')
        plot.add_caption("The whole production")

Merci !

Édité par Vayel

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Tu parle de légende mais a te lire j'ai l'impression que c'est des ticks sur l'axe des abscisses que tu parle. Tu peux clarifier / nous montrer une image ?

Si tu veux moins de date afficher sur l'axe des X, c'est ta ligne 20 a priori qui est en tord puisque tu lui demande de mettre un label majeur par jour.

+0 -0
Auteur du sujet

Ouep, je parle bien des ticks. Avec MonthLocator, ça donne ça :

MonthLocator

AutoDateLocator fonctionne plutôt bien :

AutoDateLocator

Par contre, est-il possible de lister les dates souhaitées (ici, les lact[AbstractAnalysis.DATES_KEY][0], ligne 13) ? Simple curiosité, vu que je vais prendre AutoDateLocator et utiliser je-sais-pas-quoi-encore pour marquer mes débuts de lactations.

Merci !

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Oui c'est possible. Avec une méthode set_xticks ou un truc du genre (je suis sur mon tel j'ai pas la doc sous les yeux). Tu peux spécifier précisément ceux que tu veux.

Si tu veux indiquer un début d'évènements, le plus simple serait d'ajouter un ligne vertical (en pointillet par exemple). Il y a aussi une fonction pour ça (vline je crois)

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte