Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对多个timeseries数据帧使用一个图形_Python_Pandas_Matplotlib_Jupyter Notebook - Fatal编程技术网

Python 对多个timeseries数据帧使用一个图形

Python 对多个timeseries数据帧使用一个图形,python,pandas,matplotlib,jupyter-notebook,Python,Pandas,Matplotlib,Jupyter Notebook,我目前正在使用时间序列创建一个关于股票价格的熊猫项目。我有一列股票收益率,在y轴上有负值和正值。我有过去5年的数据,试图在同一个图表中比较每年的月份,但当我绘制它们时,它们沿着日期分开,而不是重叠(下图): 因此,我想让它们在x轴上按月份1月12日分开。 无论如何,我都可以这样做,将数据保持为时间序列。 下面是三个数据帧的示例 Close Date 2017-01-31 1.000000 2017-02-28 1.033158 2017-03-31 1.041128 20

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

因此,我想让它们在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

任何帮助都将不胜感激。

我只需创建两个不同的数据帧,而不必考虑绘图和时间序列的日期。 比如:

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来放置月份。
这有帮助吗?

这有点不清楚,2016年是2月29日,其他年份则没有。它们应该如何以相同的比例绘制?@ImportanceOfBeingErnest我很确定这是因为2016年是闰年是的,我知道2016年是闰年。同样,不同年份的日期应该如何以相同的比例绘制?一旦你回答了这个问题,我可以帮助你实现它。@importantanceofbeingernest,它们将在几个月内以直线图的形式绘制,因此,例如,在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
将位于何处?是的,这确实给出了我想要的正确输出谢谢,我宁愿将其保存在时间序列中,也许这是不可能的!不用担心,我也不知道在这种情况下是否可以保持时间序列。而且,如果您不想过多地使用初始数据帧,只需创建仅用于绘图的新数据帧即可。
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)