首页 文章

使用pandas和matplotlib绘制多个折线图

提问于
浏览
19

我在pandas数据帧中有以下数据

date  template     score
0  20140605         0  0.138786
1  20140605         1  0.846441
2  20140605         2  0.766636
3  20140605         3  0.259632
4  20140605         4  0.497366
5  20140606         0  0.138139
6  20140606         1  0.845320
7  20140606         2  0.762876
8  20140606         3  0.261035
9  20140606         4  0.498010

每天将有5个模板,每个模板都有一个分数 .

我想在x轴上绘制日期并在y轴上绘制得分,并在同一图中绘制每个模板的单独折线图 .

是否可以使用matplotlib来做到这一点?

4 回答

  • 14

    您可以使用类似下面的方法 . 您可以根据每个模板的值简单地切割数据框,然后使用图的日期和分数 .

    from pandas import *
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import datetime as dt
    
    #The following part is just for generating something similar to your dataframe
    date1 = "20140605"
    date2 = "20140606"
    
    d = {'date': Series([date1]*5 + [date2]*5), 'template': Series(range(5)*2),
    'score': Series([random() for i in range(10)]) } 
    
    data = DataFrame(d)
    #end of dataset generation
    
    fig, ax = plt.subplots()
    
    for temp in range(5):
        dat = data[data['template']==temp]
        dates =  dat['date']
        dates_f = [dt.datetime.strptime(date,'%Y%m%d') for date in dates]
        ax.plot(dates_f, dat['score'], label = "Template: {0}".format(temp))
    
    plt.xlabel("Date")
    plt.ylabel("Score")
    ax.legend()
    plt.show()
    
  • 2

    您可以使用groupby方法:

    data.groupby("template").plot(x="date", y="score")
    
  • 52

    我认为使用同一图表上的所有行绘制此数据的最简单方法是将其旋转,使得每个“模板”值都是一列:

    pivoted = pandas.pivot_table(data, values='score', columns='template', index='date')
    # Now there will be an index column for date and value columns for 0,1,2,3,4
    pivoted.plot()
    
  • 11

    您可以根据组添加图例:

    plt.legend(pr['template'], loc='best')
    

相关问题