首页 > 解决方案 > 在一张图中绘制多条线,x 轴上以月为单位,y 轴上出现次数

问题描述

我目前正在研究一个电影数据集,我已将其过滤为每种类型每天的观看次数。我已将其过滤为数据框,如下所示:

我创建了一个包含 2 列(除了索引)的数据框,即'Date''Genre'. 数据类型是datetime64[ns]并且'Genre'object.

可视化这一点:

Date           Genre
2018-01-01     romance
2018-01-01     fiction
2018-01-01     romance
2018-01-02     drama
2018-01-02     romance
2018-01-02     fiction    
2018-01-02     romance
2018-01-03     romance
2018-01-03     drama

名单还在继续(整个 2018 年),它表明,根据数据集,在 2018 年 1 月 1 日,在Genre爱情片、小说和爱情片。

问题:

我想绘制一个多线图,其中每条线代表不同的流派。在 x 轴上,时间将以月为单位显示,在 y 轴上,将显示手表的数量。我正在尝试做的是在同一个图表中绘制每种类型,并显示每天该类型的手表数量,其中 x 轴以月为单位标记。

到目前为止我已经尝试过:

对每种类型的电影数据帧进行排序并将其存储在一个新变量中:

df_2018_rom = df_movies_2018[df_movies_2018.Genre == 'romance']
.groupby(['Genre', 'Date']).Date.count()

但我似乎仍然无法绘制我想要的图表。

提前感谢您的帮助!

标签: pythonpandasmatplotlib

解决方案


你可以简单地做到这一点,通过重塑你DataFramepandas.crosstab

例子

# if needed - make sure 'Date' is correct dtype
df_movies_2018['Date'] = pd.to_datetime(df['Date'])

# Filter to genres you're interested in
genres_to_plot = ['romance', 'drama', 'fiction']
df = df_movies_2018[df_movies_2018.Genre.isin(genres_to_plot)]

df_cross = pd.crosstab(df.Date, df.Genre)
df_cross.plot()

在此处输入图像描述

供参考,df_cross如下所示:

Genre       drama  fiction  romance
Date                               
2018-01-01      0        1        2
2018-01-02      1        1        2
2018-01-03      1        0        1

PandasDataFrame.plot方法会将 a 中的每一列DataFrame视为一个单独的系列(行),并index具有默认的 x 轴值。


推荐阅读