如何基于多个子集在同一图形中绘制多条直线

2024-04-28 06:55:05 发布

您现在位置: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轴上的总窗口小部件和x轴上的月份(1月1日20日至12月1日20日),然后在绘图中为2020-2025年的每个预测年份添加一条单独的线。我如何才能最好地完成这一点?我的第一个想法是根据日期范围和预测年份筛选每个部署类型,如下所示:

forecastchanges_widgets2020 = data.loc[((data['DEPLOYMENT_TYPE'] =='1') & (data['Date'] >= '2020-01-01') & (data['Date'] <= '2020-12-01')) & (data['FORECAST_YEAR'] =='2020')]

并绘制每一条线,但这意味着我需要在每一种部署类型中每年重复这一点。一定有更好的方法来达到预期的效果

这个question / answers与我的要求不匹配,因为我需要将每个部署类型分离到它自己的绘图中,然后在x轴上绘制每个月日期的'total_widgets'


Tags: 数据绘图类型datadate部署type绘制
1条回答
网友
1楼 · 发布于 2024-04-28 06:55:05
  • 对于这种情况,^{}将起作用
    • ^{}matplotlib的高级API
  • 给定您的数据帧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()

enter image description here

相关问题 更多 >