如何将数据框中的列绘制为子图

Her*_*n L 2 python date matplotlib pandas seaborn

我在这里做错了什么?我想创建新的数据框,df并使用日期作为每个新创建的数据框(Emins、FTSE、Stoxx 和 Nikkei)折线图中的 x 轴。

我有一个df从 data.xlsx 创建的名为数据框,它看起来像这样:

    Dates         ES1     Z 1     VG1     NK1
0   2005-01-04  -0.0126  0.0077 -0.0030  0.0052
1   2005-01-05  -0.0065 -0.0057  0.0007 -0.0095
2   2005-01-06   0.0042  0.0017  0.0051  0.0044
3   2005-01-07  -0.0017  0.0061  0.0010 -0.0009
4   2005-01-11  -0.0065 -0.0040 -0.0147  0.0070
3670    2020-09-16  -0.0046 -0.0065 -0.0003 -0.0009
3671    2020-09-17  -0.0083 -0.0034 -0.0039 -0.0086
3672    2020-09-18  -0.0024 -0.0009 -0.0009  0.0052
3673    2020-09-23  -0.0206  0.0102  0.0022 -0.0013
3674    2020-09-24  0.0021  -0.0136 -0.0073 -0.0116
Run Code Online (Sandbox Code Playgroud)

df创建了 4 个新数据框,分别称为 Eminis、FTSE、Stoxx 和 Nikkei。

感谢您的帮助!!!!

    Dates         ES1     Z 1     VG1     NK1
0   2005-01-04  -0.0126  0.0077 -0.0030  0.0052
1   2005-01-05  -0.0065 -0.0057  0.0007 -0.0095
2   2005-01-06   0.0042  0.0017  0.0051  0.0044
3   2005-01-07  -0.0017  0.0061  0.0010 -0.0009
4   2005-01-11  -0.0065 -0.0040 -0.0147  0.0070
3670    2020-09-16  -0.0046 -0.0065 -0.0003 -0.0009
3671    2020-09-17  -0.0083 -0.0034 -0.0039 -0.0086
3672    2020-09-18  -0.0024 -0.0009 -0.0009  0.0052
3673    2020-09-23  -0.0206  0.0102  0.0022 -0.0013
3674    2020-09-24  0.0021  -0.0136 -0.0073 -0.0116
Run Code Online (Sandbox Code Playgroud)

Val*_*_Bo 5

优雅的解决方案是:

  • 将DataFrame 中的Dates列设置为索引。
  • 创建一个具有所需数量的子图(在您的情况下为 4)的图形,调用plt.subplots
  • 从 DataFrame 中绘制一个图,传递:
    • ax -子图的ax结果(这里是Axes对象的数组 ,而不是单个Axes),
    • subplots=True - 在单独的子图中绘制每一列。

执行此操作的代码是:

fig, a = plt.subplots(2, 2, figsize=(12, 6), tight_layout=True)
df.plot(ax=a, subplots=True, rot=60);
Run Code Online (Sandbox Code Playgroud)

为了测试上面的代码,我创建了以下 DataFrame:

np.random.seed(1)
ind = pd.date_range('2005-01-01', '2006-12-31', freq='7D')
df = pd.DataFrame(np.random.rand(ind.size, 4),
    index=ind, columns=['ES1', 'Z 1', 'VG1', 'NK1'])
Run Code Online (Sandbox Code Playgroud)

并得到以下图片:

在此输入图像描述

由于我的测试数据是随机的,我假设“7天”频率,以使图片不会太“混乱”。对于真实数据,请考虑使用“7D”频率和mean()聚合函数进行重采样。