2016-11-15 1 views
1

J'essaie de tracer certaines colonnes dans une base de données qui a des valeurs de pandas timedelta comme index. Lorsque je le trace, tous les points sont régulièrement espacés le long de l'axe x, même s'il y a un intervalle de temps variable.Espacement des intervalles de l'axe lors du traçage avec des pandas timedelta

time = [pd.Timestamp('9/3/2016')-pd.Timestamp('9/1/2016'),pd.Timestamp('9/8/2016')-pd.Timestamp('9/1/2016'),pd.Timestam\p('9/29/2016')-pd.Timestamp('9/1/2016')] 
df = pd.DataFrame(index=time, columns=['y'],data=[5,0,10]) 
df.plot() 
plt.show() 

Wrong spacing

Si au lieu que j'utilisé les dates au lieu de timedelta, je reçois l'espacement approprié sur l'axe x:

time = [pd.Timestamp('9/3/2016'),pd.Timestamp('9/5/2016'),pd.Timestamp('9/20/2016')] 
df = pd.DataFrame(index=time, columns=['y'],data=[5,0,10]) 
df.plot() 
plt.show() 

Right spacing

Y at-il un moyen d'obtenir cette afficher correctement?

Répondre

0

Pour le moment, il n'est pas encore totalement supporté par les pandas. S'il vous plaît voir this issue on Github pour plus d'informations.

Pour une solution rapide, vous pouvez utiliser:

import matplotlib.pyplot as plt 
plt.plot(df.index, df.values) 

Voici un exemple de la façon dont vous pouvez jouer avec les tiques pour les rendre lisibles (plutôt que d'un très grand nombre)

import matplotlib as mpl 
import datetime 
fig, ax = plt.subplots() 
ax.plot(df.index, df.values) 
plt.xticks([t.value for t in df.index], df.index, rotation=45) 
plt.show() 

result

+0

Incroyable, merci! –

+0

Juste ajouté un exemple de la façon dont vous pouvez formater les ticks après cela ... parce qu'ils vont regarder les ordures par défaut (un très grand nombre essentiellement ...). Si cela vous aide, votez pour la réponse et acceptez aussi si cela résout votre problème. Merci! –