将数据帧的多个子图分成单个jpg - Python

时间:2017-11-13 04:39:49

标签: python dataframe plot

我有一个数据框如下:

    state           year    SUR index
0   Aguascalientes  1997    1.116118
1   Aguascalientes  1998    1.129570
2   Aguascalientes  1999    1.129570
3   Aguascalientes  2000    1.129570
4   Aguascalientes  2001    1.340662

有32种不同的状态。我需要绘制sur指数多年来如何演变,因此我需要在一个jpg中有32个不同的图形,每行4个grafs,总共8行。

我尝试了什么:

def plotting(df):
    pp = PdfPages('multipage.pdf')
    for estado in df['state'].unique():
        plt.plot(df['year'].unique(),df['SUR index'][df['state']==estado],"b")
        plt.ylabel('Sur index')
        plt.xlabel('Año')
        plt.title(estado)
        plt.savefig(pp, format='pdf')
        plt.figure()
    pp.close()

但是,第一个状态从其他状态获取所有数据,并且在该状态中有32个不同的行。而且,我还没有找到一种方法来以我需要的8 * 4方式获得它。

1 个答案:

答案 0 :(得分:1)

以下是一些示例代码,您需要调整轴网格的大小(至8x4)。

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

df = pd.DataFrame()

df['State'] = (['a','b','c','d']*30)
df.sort_values(by='State', inplace=True)
df.reset_index(inplace=True, drop=True)
df['year'] = range(1990, 2020)*4

df['SUR'] = np.random.uniform(0,100,120)


fig, axes = plt.subplots(2,2)
for (name, df), ax in zip(df.groupby('State'), axes.flat):
    df.plot(x='year',y='SUR', ax=ax, legend=False)
    ax.set_title(name)
fig.tight_layout()
fig.show()

要为需要调用的轴添加标签:

ax.set_xlabel(...)
ax.set_ylabel(...)

保存数字电话:

fig.savefig(...)

enter image description here