每个月如何做子图?

时间:2018-10-09 06:31:36

标签: python matplotlib

我已按月和日期对数据集进行了分组,并添加了第三列以计算每天的数据。

之前的数据框

    month   day  
0    1      1   
1    1      1    
2    1      1      
..
3000 12      31   
3001 12      31   
3002 12      31     

现在的数据框:

   month   day  count
0    1      1    300
1    1      2    500
2    1      3    350  
..
363  12      28   700
364  12      29   1300
365  12      30   1000  

每个月如何做子图,x是天,y是计数

    import pandas as pd
    import matplotlib.pyplot as plt
    %matplotlib inline
    df= pd.read_csv('/home/rand/Downloads/Flights.csv')
    by_month= df.groupby(['month','day']).day.agg('count').to_frame('count').reset_index()

我是数据科学领域的初学者

3 个答案:

答案 0 :(得分:1)

我认为您可以使用pandas.DataFrame.pivot来更改表格的形状,以便于绘图。因此,在您的代码中,您可以执行以下操作:

 plot_data= df.pivot(index='day', columns='month', values='count')
 plot_data.plot()
 plt.show()

这是假设您在每个月中都有相同的天数,因为在包含的样本中,第12个月只有30天。有关pivot的更多信息。

答案 1 :(得分:1)

尝试一下

fig, ax = plt.subplots()
ax.set_xticks(df['day'].unique())
df.groupby(["day", "month"]).mean()['count'].unstack().plot(ax=ax)

以上代码将为您提供12条线,分别代表一个绘图中的每个月。如果您希望在那几个月内拥有12个单独的子图,请尝试以下方法:

fig = plt.figure()
for i in range(1,13):
    df_monthly = df[df['month'] == i] # select dataframe with month = i
    ax = fig.add_subplot(12,1,i) # add subplot in the i-th position on a grid 12x1   
    ax.plot(df_monthly['day'], df_monthly['count'])
    ax.set_xticks(df_monthly['day'].unique()) # set x axis 

答案 2 :(得分:1)

尝试一下:

df = pd.DataFrame({
    'month': list(range(1, 13))*3, 
    'days': np.random.randint(1,11, 12*3), 
    'count': np.random.randint(10,20, 12*3)})

df.set_index(['month', 'days'], inplace=True)
df.sort_index()

df = df.groupby(level=[0, 1]).sum()

enter image description here

将其绘制的代码:

df.reset_index(inplace=True)
df.pivot(index='days', columns='month', values='count').fillna(0).plot()