【问题标题】:Use one graph for multiple timeseries dataframes pandas对多个时间序列数据框使用一张图 pandas
【发布时间】:2018-09-04 13:17:24
【问题描述】:

我目前正在使用时间序列创建一个关于股票价格的熊猫项目。我有一个列股票收益,在 y 轴上有负值和正值。我有过去 5 年的数据,并试图在同一个图表中比较每年的月份,但是当我绘制它们时,它们沿着日期分开而不是重叠(下图):

fig, ax = plt.subplots()
Monthly_Return2017.plot(ax=ax)
Monthly_Return2016.plot(ax=ax)
Monthly_Return2015.plot(ax=ax)
Monthly_Return2014.plot(ax=ax)
Monthly_Return2013.plot(ax=ax).axhline(y = 1, color = "black", lw = 2)
plt.show()

因此,我希望在 x 轴上将它们按 1 月至 12 月的月份分开。 无论如何我可以这样做将数据保留为时间序列。 这是三个数据帧的示例。

    Close
Date    
2017-01-31  1.000000
2017-02-28  1.033158
2017-03-31  1.041128
2017-04-30  1.137012
2017-05-31  1.210934
2017-06-30  1.140489
2017-07-31  1.167811
2017-08-31  1.178893
2017-09-30  1.203717
2017-10-31  1.275920
2017-11-30  1.281906
2017-12-31  1.313270

Close
Date    
2016-01-31  1.000000
2016-02-29  0.939188
2016-03-31  1.002692
2016-04-30  0.932781
2016-05-31  0.990268
2016-06-30  0.931557
2016-07-31  1.034780
2016-08-31  1.032438
2016-09-30  1.046221
2016-10-31  1.055979
2016-11-30  1.020311
2016-12-31  1.038859

    Close
Date    
2015-01-31  1.000000
2015-02-28  1.044676
2015-03-31  1.025219
2015-04-30  1.010808
2015-05-31  1.000970
2015-06-30  0.979148
2015-07-31  1.176855
2015-08-31  1.163010
2015-09-30  1.144519
2015-10-31  1.337128
2015-11-30  1.396929
2015-12-31  1.427554

任何帮助将不胜感激。

【问题讨论】:

  • 这有点不清楚,2016 年有 2 月 29 日,其他年份没有。它们应该如何以相同的比例绘制?
  • @ImportanceOfBeingErnest 我很确定这是因为 2016 年是闰年
  • 是的,我知道 2016 年是闰年。同样,应该如何将不同年份的日期绘制在相同的比例上?一旦你回答了这个问题,我就可以帮你实现。
  • @ImportanceOfBeingErnest,它们将在几个月内绘制为折线图,因此例如在 x 轴上,2016 年的 03-31 将在 y 轴上的 1.002692 和 2017 年的 03-31 上在 y 轴上位于 1.041128
  • 您的问题是关于 x 轴,而不是 y 轴。那么与2017-03-31 相比,2016-03-31 在 xaxis 上的位置,以及与2017-02-28 相比,2016-02-29 的位置在哪里?

标签: python pandas matplotlib jupyter-notebook


【解决方案1】:

我只会创建两个不同的数据框,而忘记情节和时间序列的日期。 类似:

import pandas as pd
import matplotlib.pyplot as plt

Monthly_Return2017 = Monthly_Return2017.reset_index()
Monthly_Return2016 = Monthly_Return2016.reset_index()

fig, ax = plt.subplots()

Monthly_Return2017['Close'].plot(ax=ax)
Monthly_Return2016['Close'].plot(ax=ax)

然后你可以玩 xticks 来增加月份。 有帮助吗?

【讨论】:

  • 是的,它确实给出了我想要的正确输出,谢谢,我宁愿把它保存在一个时间序列中,也许这是不可能的!
  • 不用担心,我也不知道在这种情况下是否可以保留时间序列。而且,如果您不想过多地使用初始数据框,只需创建仅用于绘图的新数据框。
猜你喜欢
  • 2022-11-27
  • 2018-01-10
  • 2016-01-16
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多