python - 在一张图中绘制多条线,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()
但我似乎仍然无法绘制我想要的图表。
提前感谢您的帮助!
解决方案
你可以简单地做到这一点,通过重塑你DataFrame
的pandas.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 轴值。
推荐阅读
- android - WorkManager:立即调用 doWork() 进行测试
- c - 如何在C中将十六进制数组转换为十进制并再次返回?
- typescript - 在打字稿编译器中导入较少的文件
- ios - UISearchBar 提示出现在栏上,而不是在栏的顶部
- c# - 在 C# 中实例化动态类型
- reactjs - 解析 axios.get JSON 返回显示
- node.js - 如何为 concoure 服务器创建可用于对 concourse 服务器的 API 调用的 Authkey?
- javascript - 在 React 中 useCallback/useMemo 有什么作用?
- angular - 如何在没有路由的情况下以 6/7 角度获取查询参数
- sql - 多行的 SQL db2 更新查询