python - 如何基于多个子集在同一个图中绘制多条线
问题描述
我有一个类似于以下的数据集:
SNAPSHOT_DATE DEPLOYMENT_TYPE FORECAST_YEAR TOTAL_WIDGETS
1/1/20 1 2020 206457
1/1/20 1 2021 70571
1/1/20 1 2022 46918
1/1/20 1 2023 36492
1/1/20 1 2024 0
1/1/20 1 2025 0
2/1/20 1 2020 207177
2/1/20 1 2021 71947
2/1/20 1 2022 46918
2/1/20 1 2023 36492
2/1/20 1 2024 0
2/1/20 1 2025 0
3/1/20 1 2020 242758
3/1/20 1 2021 102739
3/1/20 1 2022 43174
3/1/20 1 2023 32956
3/1/20 1 2024 0
3/1/20 1 2025 0
1/1/20 2 2020 286616
1/1/20 2 2021 134276
1/1/20 2 2022 87674
1/1/20 2 2023 240
1/1/20 2 2024 0
1/1/20 2 2025 0
2/1/20 2 2020 308145
2/1/20 2 2021 132996
2/1/20 2 2022 87674
2/1/20 2 2023 240
2/1/20 2 2024 0
2/1/20 2 2025 0
3/1/20 2 2020 218761
3/1/20 2 2021 178594
3/1/20 2 2022 87674
3/1/20 2 2023 240
3/1/20 2 2024 0
3/1/20 2 2025 0
我希望能够为每种部署类型绘制图,y 轴上的 Total Widgets 和 x 轴上的月份(20 年 1 月 1 日 - 20 年 12 月 1 日)然后在图中为每个预测的 2020 年包含一条单独的线- 2025 年。我怎样才能最好地做到这一点?我的第一个想法是根据日期范围和预测年份过滤每种部署类型,如下所示:
forecastchanges_widgets2020 = data.loc[((data['DEPLOYMENT_TYPE'] =='1') & (data['Date'] >= '2020-01-01') & (data['Date'] <= '2020-12-01')) & (data['FORECAST_YEAR'] =='2020')]
并绘制每一行,但这意味着我需要为每个部署类型中包含的每一年重复这一点。必须有更好的方法来实现所需的情节吗?
这个问题/答案不符合我的要求,因为我需要将每种部署类型分离到自己的图中,然后'total_widgets'
在 x 轴上跨月日期绘制每年的值
解决方案
- 对于这种情况,
sns.relplot
将工作seaborn
是matplotlib
.
- 给定您的数据框
data
data
仅包含'SNAPSHOT'
年份为 2020 年的信息,但是,对于完整的数据集,在'Snapshot_Year'
.
- 由于每行图的 x 轴都不同
facet_kws={'sharex': False})
,因此xlim
可以根据年份的日期范围进行缩放。
import pandas as pd
import seaborn as sns
# convert SNAPSHOT_DATE to a datetime dtype
data.SNAPSHOT_DATE = pd.to_datetime(data.SNAPSHOT_DATE)
# add the snapshot year as a new column
data.insert(1, 'Snapshot_Year', data.SNAPSHOT_DATE.dt.year)
# plot the data
g = sns.relplot(data=data, col='DEPLOYMENT_TYPE', row='Snapshot_Year', x='SNAPSHOT_DATE', y='TOTAL_WIDGETS',
hue='FORECAST_YEAR', kind='line', facet_kws={'sharex': False})
g.set_xticklabels(rotation=90)
plt.tight_layout()
推荐阅读
- c# - 如何在 .net 4.7 项目中使用 Unity 容器解析 EF Core 上下文
- c - 如何更改结构中的整数变量?
- mongodb - 如何删除mongodb中两个特定日期之间的特定数据
- c - 在 C 中将结构传递给单独的函数时遇到问题
- centos - CentO 不会增加内存限制
- laravel - $visitor = Tracker::currentSession(); 返回空数据
- html - Make outlook email tale text align vertically
- oracle - Oracle using multiple variables in select statement
- java - Change GMT to EST time in Java 6
- oracle - Collections: Nested Tables- data not displaying