L'échelle logaritmique ne se met pas partout dans un multiplot

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

Bonjour, j'ai un petit problème avec pyplot. Je suis en train de faire un ensemble de graphiques qui extraient une semaine de stat générés par la prod de mon stage.

Je lance donc les requêtes adéquates, je crée un multiplot pour afficher un graphique par jour étudié. Seulement voilà, quoi que je fasse, l'échèle logarithmique n'est pas appliquée sur le dernier graphique.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
for k, v in data.iteritems():
    plt.hold(False)
    plt.yscale("log")
    h = np.linspace(0,23,300)
    plt.subplot(len(data)//2 + 1, 2, int(k) - 9) # les jours commencent à 10
    plt.plot(h, spline(range(0,24), v['data1000000000'], h), label = u"Toutes données acceptées" )
    plt.hold(True)
    plt.plot(h, spline(range(0,24), v['data7776000'], h), label = u"Déclenchement à 3 mois" )
    plt.hold(True)
    plt.plot(h, spline(range(0,24), v['data300'], h), label = u"Déclenchement à 5min" )
    date = datetime.date(2015, 03, k)
    plt.title(u"Temps moyen de remontée le {} en fonction de l'heure de notification".format(date.strftime("%A %d %B %Y")))
    plt.legend()

fig.set_size_inches(20, 30) 
fig.savefig("graph_avg/avg_week.png", dpi=100)

Et j'obtiens :

courbes

PS : non, je n'ai aucune données négatives

+0 -0
Staff

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

Et si tu utilisais plt.semilogy() plutot que plt.plot() ?

edit:

sinon tu devrais faire à la place des lignes 3 et 5:

1
2
ax = plt.subplot(len(data)//2 + 1, 2, int(k) - 9) # les jours commencent à 10
ax.set_yscale("log")

Ou enfin simplement passer ta ligne 3 après ta ligne 5. Quand tu utilise pylab tu es dans une machine à état et donc ta ligne 3 s'applique au dernier axe définit. Or tu ne crée un nouvel axe qu'a la ligne 5. Pour que le scale s'applique à chaque itération tu dois le définir APRES le subplot

Édité par Kje

+1 -0
Staff

Un jour je crois que je ferai un tuto sur matplotlib. J'ai toujours eu peur que ça fasse trop recueil de trucs et astuce mais il y a peut être des concepts qui mériteraient d'être exploré…

+3 -0
Staff
Auteur du sujet

En fait ce qui m'intéresserait bien perso ce sont les graphes joints, les graphes kde, bref tout ce qui permet de faire des corrélations.

Bien évidemment, j'aurais bien aimé, avant de me tromper savoir que pyplot/matplotlib est une machine à état, mais si on veut éviter le reccueil de TEA, alors effectivement, ça peut être sympa de parler des graphes non courants.

Édité par artragis

+0 -0
Staff

En matplotlib tu as les 2. pylab est une machine à etat "à la matlab" mais propose aussi une forme objet (cf mon bout de code précédent). Tu as le choix en fait.

+1 -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