简体   繁体   English

使用Pandas数据透视表创建子图

[英]Creating subplots with a pandas pivot table

Given the dataframe below I want to create a figure with two subplots, one for each Hemisphere. 给定下面的数据框,我想创建一个包含两个子图的图形,每个半球一个。 Plts should show means against diffs. Plts应该显示针对差异的手段。

df = pd.DataFrame({'id':[1,1,1,1,2,2,2,2],
                   'eye':['l','r','l','r','l','r','l','r'],
                   'trial':[1,1,2,2,1,1,2,2],
                   'S':[2,2,3,3,5,5,7,7],
                   'I':[2,2,1,1,4,4,3,3]})

df = df.melt(id_vars=['id','eye','trial'],
             value_vars=['S','I'],
             var_name='Hemisphere',
             value_name='Thickness')

df = df.pivot_table(index=['id','eye','Hemisphere'],
                    columns='trial',
                    values='Thickness')

df['diffs'] = df[1] - df[2]
df['means'] = np.mean([df[1], df[2]], axis=0)

df = df.unstack(level=2)

df.plot('means','diffs',subplots=True,kind='scatter')

groupby with axis=1 axis=1 groupby

axes = df[['diffs', 'means']].groupby(axis=1, level=1).plot.scatter('means', 'diffs')

在此处输入图片说明


Loop over groupby 遍历groupby

Get finer control 获得更好的控制

colors = iter('gr')
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(6, 8))
for i, (k, d) in enumerate(df.groupby(axis=1, level=1)):
    d.xs(k, axis=1, level=1).plot.scatter(
        'means', 'diffs', title=k, ax=axes[i], c=next(colors))

fig.tight_layout()

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM