2016-11-15 1 views
1

Ich versuche, einige Spalten in einem Datenrahmen, der Pandas Timedelta-Werte als Index hat. Wenn ich es plotte, sind alle Punkte gleichmäßig entlang der x-Achse verteilt, auch wenn es eine variable Zeit dazwischen gibt.Axis Intervall Abstand beim Plotten mit 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

Wenn stattdessen verwendet ich Daten statt Timedelta, ich den richtigen Abstand zu bekommen auf der x-Achse:

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

Gibt es eine Möglichkeit, dies zu erhalten richtig angezeigt werden?

Antwort

0

Im Moment wird es in Pandas noch nicht vollständig unterstützt. Weitere Informationen finden Sie unter this issue on Github.

Für eine schnelle Abhilfe können Sie verwenden:

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

Hier ist ein Beispiel dafür, wie man mit den Zecken spielen könnte sie lesbar zu machen (und nicht nur eine sehr große Zahl)

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

Erstaunlich, danke! –

+0

Ich habe gerade ein Beispiel hinzugefügt, wie man die Ticks danach formatieren kann ... weil sie standardmäßig Müll sind (eine sehr große Zahl im Grunde ...). Wenn das hilfreich ist, stimmen Sie bitte die Antwort ab und akzeptieren Sie auch, wenn es Ihr Problem gelöst hat. Vielen Dank! –