198 votes

Date de tiques et de la rotation dans matplotlib

Je rencontre un problème en essayant d'obtenir ma date tiques tourné dans matplotlib. Un petit exemple de programme est ci-dessous. Si j'essaie de faire pivoter les tiques à la fin, les tiques ne pas obtenir de la rotation. Si j'essaie de faire pivoter les tiques, comme indiqué dans le commentaire "se bloque", puis matplot lib se bloque.

Cela se produit uniquement si les valeurs de x sont des dates. Si je remplace la variable "date" avec la variable " t " dans l'appel à avail_plot, le xticks(rotation=70) appel fonctionne très bien à l'intérieur de avail_plot.

Des idées?

import numpy as np
import matplotlib.pyplot as plt
import datetime as dt

def avail_plot(ax, x, y, label, lcolor):
    ax.plot(x,y,'b')
    ax.set_ylabel(label, rotation='horizontal', color=lcolor)
    ax.get_yaxis().set_ticks([])

    #crashes
    #plt.xticks(rotation=70)

    ax2 = ax.twinx()
    ax2.plot(x, [1 for a in y], 'b')
    ax2.get_yaxis().set_ticks([])
    ax2.set_ylabel('testing')

f, axs = plt.subplots(2, sharex=True, sharey=True)
t = np.arange(0.01, 5, 1)
s1 = np.exp(t)
start = dt.datetime.now()
dates=[]
for val in t:
    next_val = start + dt.timedelta(0,val)
    dates.append(next_val)
    start = next_val

avail_plot(axs[0], dates, s1, 'testing', 'green')
avail_plot(axs[1], dates, s1, 'testing2', 'red')
plt.subplots_adjust(hspace=0, bottom=0.3)
plt.yticks([0.5,],("",""))
#doesn't crash, but does not rotate the xticks
#plt.xticks(rotation=70)
plt.show()

272voto

cge Points 1830

Déplacer plt.xticks(rotation=70) à droite, avant que les deux avail_plot les appels, par exemple

plt.xticks(rotation=70)
avail_plot(axs[0], dates, s1, 'testing', 'green')
avail_plot(axs[1], dates, s1, 'testing2', 'red')

Ceci définit la propriété de rotation avant de mettre en place les étiquettes. Puisque vous avez deux axes ici, je pense que plt.xticks devient confus après que vous avez fait pour les deux parcelles. Il semble qu'au point lors de la plt.xticks ne pas faire n'importe quoi, plt.gca() n'est pas de vous donner les axes que vous souhaitez modifier, et ainsi de plt.xticks, qui agit sur le courant axes, n'est pas d'aller travailler.

Sinon, par exemple, ne pas utiliser de plt.xticks, vous pouvez utiliser

plt.setp( axs[1].xaxis.get_majorticklabels(), rotation=70 )

après les deux avail_plot appels.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X