2016-05-16 6 views
1

die folgenden Datenrahmen und die daraus resultierende Pivot-Tabelle Gegeben:Matplotlib Liniendiagramm mit Pandas Pivot-Tabelle

import pandas as pd 
import numpy as np 
%matplotlib inline 
df = pd.DataFrame(
     {'YYYYMM':[201603,201503,201403,201303,201603,201503,201403,201303], 
     'Count':[5,6,2,7,4,7,8,9], 
     'Group':['A','A','A','A','B','B','B','B']}) 
df['YYYYMM']=df['YYYYMM'].astype(str).str[:-2].astype(np.int64) 
t=df.pivot_table(df,index=['YYYYMM'],columns=['Group'],aggfunc=np.sum) 


    Count 
Group A B 
YYYYMM  
2013 7 9 
2014 2 8 
2015 6 7 
2016 5 4 

ich mag es zeichne ein Liniendiagramm mit den y-Achsen-Tick-Beschriftungen reflektieren die Jahre zu erstellen (YYYYMM) wie in der Pivot-Tabelle gezeigt.

Hier ist, was ich bisher:

fig, ax = plt.subplots(1,1) 
t.plot(ax=ax) 

Die Achsenbeschriftungen 2013 sein sollte, 2014, 2015 und 2016 jeweils statt dessen, was da ist.

enter image description here

Vielen Dank im Voraus!

Antwort

1

Ich glaube, Sie .astype(np.int64) entfernen können, aber Sie dann Art von Werten in Index string erhalten:

df['YYYYMM']=df['YYYYMM'].astype(str).str[:-2] 

print t.index 
Index([u'2013', u'2014', u'2015', u'2016'], dtype='object', name=u'YYYYMM') 

Aber wenn Sie benötigen int Index, zu verwenden:

from matplotlib.ticker import FuncFormatter 

fig, ax = plt.subplots(1,1) 
ax.xaxis.set_major_formatter(FuncFormatter(lambda x, _: int(x))) 
t.plot(ax=ax)