Matplotlib : n'afficher que certains labels

Le problème exposé dans ce sujet a été résolu.

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 !

+0 -0

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.

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

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)

Ouep, c'est bien ça. Bien joué. ^^

Bonne idée la ligne verticale. Du coup, j'ai utilisé plusieurs appels à plt.plot :

Plusieurs appels à plt.plot

Encore merci !

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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