迭代通过Groupby.unstack()项来制作单独的图

时间:2015-12-13 16:43:13

标签: python for-loop pandas matplotlib group-by

我有一个名为afplot的数据框:

apple_fplot = apple_f1.groupby(['Year','Domain Category'])['Value'].sum()
afplot = apple_fplot.unstack('Domain Category')

我现在需要为afplot的每一列生成一个绘图,并且需要将每个绘图保存为唯一的文件名。

我一直试图通过for循环来做到这一点,(我知道效率低下),但似乎无法做到正确。

for index, column in afplot.iteritems():
    plt.figure(index); afplot[column].plot(figsize=(12,6))
    plt.xlabel('Year')
    plt.ylabel('Fungicide used / lb')
    plt.title('Amount of fungicides used on apples in the US')
    plt.legend()
    plt.savefig('C:/Users/User/Documents/Work/Year 3/Project/Plots/apple_fplot{}'.format(index))

我不确定我是否会以正确的方式进行此操作,但整个想法是在每次迭代完成时重置绘图,仅绘制 下一列的线图,然后将其保存为新的文件名。

1 个答案:

答案 0 :(得分:1)

For i = 2 To FinalRowI e1 = Trim(wi.Range("B" & i).Value2) If CBool(Application.CountIf(wn.Columns(3), e1)) Or CBool(Application.CountIf(wr.Columns(1), e1)) Then wi.Cells(i, "A").EntireRow.Cut _ Destination:=wr.Range("A" & Rows.Count).End(xlUp).Offset(1) End If Next i 迭代器返回(df.iteritems()column name)对([请参阅文档])1。所以你可以简化:

series

for col, data in afplot.iteritems(): ax = data.plot(title='Amount of fungicides used on apples in the US')) ax.set_ylabel('Fungicide used / lb') plt.gcf().savefig('C:/Users/User/Documents/Work/Year 3/Project/Plots/apple_fplot{}'.format(col)) plt.close() 应该已经是'年',因为它似乎是xlabel的{​​{1}}。默认情况下,nameindex。请参阅additional plot parameters