2016-07-05 4 views
0

Мне нужна помощь в этом. Сюжет прекрасен, но когда я нахожусь над точками, я получаю цену S & P как y (это правильно), но вместо даты как x я получаю временную метку. Есть ли кто-нибудь, кто может это исправить? Благодаря!Наклейки с меткой даты с mpld3

import matplotlib.pyplot as plt 
import mpld3 
from mpld3 import plugins 
import pandas.io.data as pdweb 
import datetime 
mpld3.enable_notebook() 
%matplotlib inline 


price = pdweb.get_data_yahoo("^GSPC",start = datetime.datetime(2014,1,1),end=datetime.datetime(2016,6,30))['Adj Close'] 
fig, ax = plt.subplots(figsize=(12,8)) 
ax.plot(price.index, price, lw=1) 
points = ax.scatter(price.index, price, alpha=0.1) 
plugins.connect(fig, plugins.LineLabelTooltip(points)) 

ответ

1

Это, вероятно, не лучший метод, но он работает:

series = ax.plot(price) 
date_axis = [pd.to_datetime(str(date)).strftime('%Y.%m.%d') for date in series[0].get_data()[0]] 
labels = [(date, " {0}".format(val)) for date, val in zip(date_axis, series[0].get_data()[1])] 

Так шаги, чтобы сделать его немного яснее, чем выше беспорядок:

1) участок ценовой серии

series = ax.plot(price) 

2) Принимая каждую дату в numpy.ndArray of datatime64 (ось x серии) и делая ее строкой ,

string_dates = [str(date) for date in series[0].get_data()[0]] 

3) Затем преобразование строк в pandas datetime.

dates = [pd_to_datetime(date) for date in string_dates] 

4) Затем с помощью STRFTIME() для форматирования каждой строки даты и сохранения его в date_axis

date_axis = [date.strftime('%Y.%m.%d') for date in dates] 

Как я уже сказал, это почти наверняка не эффективный способ сделать это, но он работал для меня как временное решение, пытаясь понять это на некоторое время. Нашли это в другом месте на SO, у вас нет ссылки.

+0

Большое спасибо, но я получаю эту ошибку. Любая идея, как ее решить? Еще раз спасибо – MrFed

+0

AttributeError: объект 'str' не имеет атрибута 'strftime' – MrFed