2016-05-13 4 views
0

Учитывая следующий кадр данных:Пандас Matplotlib Линейный график

import pandas as pd 
import numpy as np 

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 

    Count Group YYYYMM 
0 5   A  201603 
1 6   A  201503 
2 2   A  201403 
3 7   A  201303 
4 4   B  201603 
5 7   B  201503 
6 8   B  201403 
7 9   B  201303 

мне нужно генерировать линейный график с одной линией на каждую группу вместе со сводной таблицей в нижней части. Что-то вроде этого: enter image description here

Мне нужен каждый экземпляр «YYYYMM», который нужно рассматривать как год от Pandas/Matplotlib. До сих пор, это, кажется, помогает, но я не уверен, если это будет делать трюк:

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 

Затем я попытался чтобы построить его:

import matplotlib.pyplot as plt 
%matplotlib inline 
fig, ax = plt.subplots(1,1) 
t.plot(table=t,ax=ax) 

... и это случилось:

enter image description here

Я хотел бы сделать следующее:

  1. Удалите все строки (бордюры) из таблицы в нижней

  2. удалить перемешаны текст в таблице

  3. удалить метки метки оси x (в нем должны указываться годы для тик-ярлыков)

Я могу самостоятельно убрать остальные (удалить легенду и границы и т. Д.).

Заранее благодарен!

ответ

2

Возможно, я не вполне понял, что вы подразумеваете под 1., поскольку вы показываете строки таблицы в своей ссылке. Я также не понял, хотите ли вы переставить таблицу.

Что вы будете искать это:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

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(int) 

t=pd.pivot_table(df, values='Count', index='YYYYMM',columns='Group',aggfunc=np.sum) 
t.index.name = None 

fig, ax = plt.subplots(1,1) 
t.plot(table=t,ax=ax) 
ax.xaxis.set_major_formatter(plt.NullFormatter()) 

plt.tick_params(
    axis='x',   # changes apply to the x-axis 
    which='both',  # both major and minor ticks are affected 
    bottom='off',  # ticks along the bottom edge are off 
    top='off',   # ticks along the top edge are off 
    labelbottom='off') # labels along the bottom edge are off 
plt.show() 

enter image description here