Matplotlib线图与表从熊猫数据透视表

时间:2016-05-16 21:14:36

标签: python-3.x pandas matplotlib pivot-table

鉴于以下内容:

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]
t=df.pivot_table(df,index=['YYYYMM'],columns=['Group'],aggfunc=np.sum)

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

enter image description here

我想在它下面添加一个摘要表作为单独的轴。

我将通过subplot2grid分配另一个轴,但是使用子图(2,1)将起作用,我可以根据我的需要调整它。

我希望桌子看起来像这样:

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

......如果可能,没有边框/行。

更新

以下是我使用subplot2grid尝试过的示例:

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]
t=df.pivot_table(df,index=['YYYYMM'],columns=['Group'],aggfunc=np.sum)
fig = plt.figure(figsize=(figsize), dpi=300)
ax1 = plt.subplot2grid((100,100), (0,0), rowspan=70, colspan=100)
ax2 = plt.subplot2grid((100,100), (80,0), rowspan=20, colspan=100)
t.plot(ax=ax1)

ax1.legend_.remove()
ax1.spines['top'].set_visible(False);ax1.spines['right'].set_visible(False);ax1.spines['bottom'].set_visible(False);ax1.spines['left'].set_visible(False)
ax2.spines['top'].set_visible(False);ax2.spines['right'].set_visible(False);ax2.spines['bottom'].set_visible(False);ax2.spines['left'].set_visible(False)
#ax1.xaxis.set_visible(False) #Hide x axis label
ax2.xaxis.set_visible(False)
ax2.yaxis.set_visible(False)

ax1.tick_params(axis='x',which='both',bottom='on',top='off')
ax1.tick_params(axis='y',which='both',left='on',right='off')
ax2.tick_params(axis='x',which='both',bottom='off',top='off')
ax2.tick_params(axis='y',which='both',left='off',right='off')

from matplotlib.colors import ListedColormap
t2=df.pivot_table(df,index=['Group'],columns=['YYYYMM'],aggfunc=np.sum).sortlevel(ascending=False)

sns.heatmap(df,annot=True,fmt='d',linewidths=.5,cbar=False,cmap=ListedColormap(['white']))

plt.show()

...产生这个(注意底部图是隐藏的;这是故意的,因为我只想在绝对需要的行和列之间显示微弱的灰线(根据Stephen Few - " Show Me The Numbers& #34)。 但我希望表中的这些年能够与x轴上的年份索引刻度标签保持一致。

另一次更新: 使用Seaborn(参见更新中的最后4行代码),我尝试了一个热图,这可能会让我到达我需要的位置。我只需要格式化数字,标记组,并可能改变日期。

enter image description here

0 个答案:

没有答案