【问题标题】:Plotting pandas dataframe with years用年绘制熊猫数据框
【发布时间】:2017-05-28 10:38:57
【问题描述】:
       error   Months    Year
0  15.198688      Jan  2011.0
1  13.793969  Jan_Feb  2011.0
2  15.171848  Jan_Mar  2011.0
3   5.779007  Jan_Apr  2011.0
4   1.615044  Jan_May  2011.0
5   1.536096  Jan_Jun  2011.0
6   1.159742  Jan_Jul  2011.0
0   1.697396      Jan  2012.0
1   5.149847  Jan_Feb  2012.0
2   0.876639  Jan_Mar  2012.0
3   1.865001  Jan_Apr  2012.0
4   0.333077  Jan_May  2012.0
5   2.056728  Jan_Jun  2012.0
0   9.676028      Jan  2013.0
1   3.919200  Jan_Feb  2013.0
2   4.171534  Jan_Mar  2013.0
3   2.318090  Jan_Apr  2013.0
4   0.786901  Jan_May  2013.0
5   0.936041  Jan_Jun  2013.0
6   0.115029  Jan_Jul  2013.0

有没有办法绘制上面的 pandas 数据框,以便该图有 3 行(3 个独特年份中的每一行)。 Y 轴有“错误”列,X 轴显示月份。传说应该是3年:2011、2012、2013

对于 X 轴,如果月份是 'Jan_Feb',则标签应该只是说 'Feb'。如果月份为“Jan”,则标签应为“Jan”

我尝试了 df.plot(),但它将所有内容都绘制在一个图中

【问题讨论】:

标签: python pandas plot


【解决方案1】:

您可以先进行一些数据清理 - 将 years 转换为 intmonths 转换为 ordered categorical 以便按月正确排序,然后通过 pivot 重新整形,如有必要,将 NaN 替换为某个值,例如0fillna:

df.Year = df.Year.astype(int)
df.Months = df.Months.str[-3:].astype('category', 
                                      ordered=True, 
                                      categories=['Jan','Feb','Mar','Apr','May','Jun','Jul'])

df = df.pivot(index='Months', columns='Year', values='error').fillna(0)
print (df)
Year         2011      2012      2013
Months                               
Jan     15.198688  1.697396  9.676028
Feb     13.793969  5.149847  3.919200
Mar     15.171848  0.876639  4.171534
Apr      5.779007  1.865001  2.318090
May      1.615044  0.333077  0.786901
Jun      1.536096  2.056728  0.936041
Jul      1.159742  0.000000  0.115029

df.plot()

另一种正确排序的可能解决方案是reindex,按list 中的月份排序:

df.Year = df.Year.astype(int)
df.Months = df.Months.str[-3:]
df = df.pivot(index='Months', columns='Year', values='error')
       .fillna(0)
       .reindex(['Jan','Feb','Mar','Apr','May','Jun','Jul'])

print (df)
Year         2011      2012      2013
Months                               
Jan     15.198688  1.697396  9.676028
Feb     13.793969  5.149847  3.919200
Mar     15.171848  0.876639  4.171534
Apr      5.779007  1.865001  2.318090
May      1.615044  0.333077  0.786901
Jun      1.536096  2.056728  0.936041
Jul      1.159742  0.000000  0.115029

【讨论】:

    【解决方案2】:

    请注意,在此数据集中,可以从索引中识别月份,即。 [0..6] -> [Jan..Jul],应使用以下代码生成所需的图:

    plt = df.pivot(values='error', columns='Year').plot()
    

    但是,现在 x 轴刻度文本是数字的。我们可以使用以下方法解决此问题:

    plt.set_xticklabels(['Jan','Feb','Mar','Apr','May','Jun','Jul'])
    

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 2016-01-07
      • 2015-05-27
      • 1970-01-01
      • 2017-10-10
      • 2020-01-14
      • 2017-06-09
      • 2015-02-04
      相关资源
      最近更新 更多