Pandas子图绘制多个y轴

时间:2017-11-27 23:22:04

标签: python pandas matplotlib plot

我有一个看起来像这样的数据框。我需要每个独特项目(书,桌子和椅子)的子图。图表应按年份排序(年份也是x轴)。我需要利用twiny来左边的Price和每个子图右边的数量。

我可以通过创建单个数据框手动为每个项目执行此操作。所以我为Book创建了一个数据框,然后按Year排序并将Year设置为索引。然后使用secondary_y创建绘图。但显然这是漫长的啰嗦。有没有办法从原始数据帧执行此操作而不进行所有手动处理?

    Item  Year Price  Quantity
0   Book  2000    $2        50
1  Table  2000   $33        44
2  Chair  2000   $21        31
3   Book  2001    $3        77
4  Table  2001   $20       500
5  Chair  2001    $2        50
6   Book  2002   $36         7
7  Table  2002  $200        50
8  Chair  2002   $44         5

1 个答案:

答案 0 :(得分:1)

不确定你的意思,但也许你可以使用groupby()然后遍历这些群组?

这是一个简单的例子(使用pyplot)

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

%matplotlib inline

dicts = []
dicts.append({'item':'book','year':2000,'price':2, 'quantity':50})
dicts.append({'item':'table','year':2000,'price':33, 'quantity':44})
dicts.append({'item':'chair','year':2000,'price':21, 'quantity':31})

dicts.append({'item':'book','year':2001,'price':3, 'quantity':50})
dicts.append({'item':'table','year':2001,'price':20, 'quantity':44})
dicts.append({'item':'chair','year':2001,'price':2, 'quantity':31})

dicts.append({'item':'book','year':2002,'price':36, 'quantity':7})
dicts.append({'item':'table','year':2002,'price':200, 'quantity':50})
dicts.append({'item':'chair','year':2002,'price':44, 'quantity':5})

df = pd.DataFrame.from_records(dicts)

grouped = df.groupby('item')

fig, axes = plt.subplots(1,3,sharey=True)

fig.set_size_inches(15,4)

for i,group_key in enumerate(list(grouped.groups.keys())):
    grouped.get_group(group_key).set_index('year').plot(kind='bar',ax = axes[i])
    axes[i].set_title(group_key,fontsize=15)

enter image description here