将时间戳转换为日期,并在matplotlib中将plot()转换为等效值

时间:2014-09-01 21:24:01

标签: python matplotlib pandas

我无法创建情节,也无法将时间戳转换为日期。

下面的代码将yahoo finance的数据提取到pandas数据框中。日期用作该文件中数据集的索引,如下所示:

2007-05-01 00:00:00

首先,我想将该索引从datetime转换为date格式,但更重要的是,我想弄清楚在下面的代码中使用matplotlib重现从rels.plot()获得的图,以便我可以在给定日期添加一条垂直线(格式不需要完全相同。)

import pandas.io.data as web
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

all_data = {}
for ticker in ['AAPL','MSFT']:
        all_data[ticker] = web.get_data_yahoo(ticker, '5/1/2007','10/1/2007')

price = pd.DataFrame({tic:data['Adj Close']
                    for tic, data in all_data.iteritems()})

volume = pd.DataFrame({tic:data['Volume']
                    for tic, data in all_data.iteritems()})

returns = price.pct_change()
rels = price/price.ix[0]

rels.plot()

plt.Line2D(rels.index,rels.AAPL)
plt.show()

上面的代码会下载所有数据,以便您可以使用我在您的计算机上使用的相同数据(如果需要)。现在,在我的IP [y]笔记本电脑上,此代码运行,但plt.show()不生成绘图。代码应该生成两个图(第一个是我试图用matplotlib重新创建的参考图。)

2 个答案:

答案 0 :(得分:0)

[从评论中移出来关闭此:]

而不是Line2D,它只是创建一个线对象,如果你想真正制作一个你想要的新的完整情节

plt.plot(rels.index, rels.AAPL)

代替。

答案 1 :(得分:0)

您可以使用strptime和格式来获取要插入到yahoo web.get中的日期字符串:

 import datetime as dt

 startdate = '5/1/2007'
 enddate = '10/1/2007'

 time_format = "%Y,%m,%d"

 dt_start = dt.datetime.strptime(startdate, time_format)

 dt_end = dt.datetime.strptime(enddate, time_format)

 The rest of the code example****** = web.get_data_yahoo(ticker, dt_start,dt_end)