【问题标题】:Creating a matplotlib multi-series line plot with pandas使用 pandas 创建 matplotlib 多系列线图
【发布时间】:2018-08-13 03:02:45
【问题描述】:

我想创建一个多系列线图,显示数据框元素的出现如何随时间变化:

我有两个列表,我加入了一个数据框:

df = pd.DataFrame(
{'Date': datelist,
 'Category': catlist
})

然后我对数据框进行分组,以显示随着时间的推移每次出现的计数:

df = df.groupby(['Date', 'Category']).size()
print df

这会返回如下所示的内容:

 Date        Category        
 13/02/2018  clean          2
             suspicious     1
 14/02/2018  clean          2
 19/02/2018  clean          2

我现在想为每个类别类型创建一个多系列线图,显示计数如何随日期变化。

我真的不知道如何使用 matplotlib 来做到这一点

【问题讨论】:

    标签: python pandas matplotlib line


    【解决方案1】:

    你可以试试:

    plot_df = df.unstack('Category')
    plot_df.index = pd.PeriodIndex(plot_df.index.tolist(), freq='D')
    plot_df.plot()
    plt.show()
    

    或者subplot:

    plot_df.plot(subplots=True)
    

    示例: 对于数据框:

    Date        Category
    13/02/2018  clean
    13/02/2018  clean
    13/02/2018  suspicious
    14/02/2018  clean
    14/02/2018  clean
    19/02/2018  clean
    19/02/2018  clean
    14/02/2018  suspicious
    13/02/2018  suspicious
    14/02/2018  clean
    

    【讨论】:

    • 谢谢,为什么它只绘制一个类别而只绘制列表中的一个日期?
    • 什么意思?如果某个类别是常量,则可能会在图表中看不到它
    • 我现在的主要问题是 X 轴上的日期显示为以下“13 Feb 18”、“14”、“15” - 为什么没有显示完整日期?
    • 对于可疑类别很可能是因为它是恒定的,或者只是一天。让我看看日期
    【解决方案2】:
    categories = df.Category.unique()   #to find unique categories
    f,plots = plt.subplots(1,categories.len())   #generate subplot grid (1xNo. of unique categories)
    for i, category in enumerate(categories):
        temp = df['Category'==category]   #get data for each category
        plots[i].scatter(temp['Date'],temp['Count'])   #plot for that category
    plt.show()   #show final generated plot
    

    以上是python代码,可能有一些语法错误,但它会让你知道如何解决你的问题以及如何编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多