【问题标题】:How to plot multiple lines within the same graph based on multiple subsets如何基于多个子集在同一个图中绘制多条线
【发布时间】:2021-03-10 01:18:59
【问题描述】:

我有一个类似于以下的数据集:

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')]

并绘制每一行,但这意味着我需要为每个部署类型中包含的每一年重复这一点。一定有更好的方法来实现想要的情节?

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

【问题讨论】:

    标签: python pandas matplotlib seaborn


    【解决方案1】:
    • 对于这种情况,sns.relplot 将起作用
      • seabornmatplotlib 的高级 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多