在一张图中绘制多条线,在x轴上以月​​为单位的时间,在y轴上以出现次数

时间:2019-04-19 13:33:07

标签: python pandas matplotlib

我目前正在处理电影数据集,已将其过滤为每种类型每天的手表数量。我已将其过滤到数据框,如下所示:

我创建了一个具有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()

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

感谢您的任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以通过使用pandas.crosstab重塑DataFrame来简单地做到这一点:

示例

# 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()

enter image description here

供参考,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

Pandas DataFrame.plot方法会将DataFrame中的每一列视为一个单独的系列(行),其中index是默认的x轴值。