Как получить фактические данные из графика с помощью python?

Я сделал график данных о запасах, используя модуль fbprophet в python. мой график выглядит так: введите здесь описание изображения

Код, который я использую, таков:

model = Prophet()
model.fit(df)
future = model.make_future_dataframe(periods=365)  # forecasting for 1 year from now.
forecast = model.predict(future)

''' Plotting the forecast '''
figure = model.plot(forecast)
plt.plot = figure

figure.savefig('forecasting for 1 year.svg')

Из приведенного выше кода я сделал этот график. затем я извлек из него точки данных, используя модуль mpld3

import mpld3
# print(mpld3.fig_to_dict(figure))
print(mpld3.fig_to_dict(figure)['data'])

Это дает мне вывод следующим образом:

{'data01': [[734094.0, 3.3773930153824794], [734095.0, 3.379438304627263],  ........ 'data03': [[0.0, 0.0]]}

Но проблема заключается в том, что из приведенного выше вывода значения y, которые я получаю, верны, но не значения x. Фактические значения x такие:

"x": [
        "2010-11-18 00:00:00",
        "2010-11-19 00:00:00",
        "2010-11-22 00:00:00" ... ]

но я получаю значения x следующим образом: 734094.0 , 734095.0 ..

Итак, как я могу получить фактические данные (точки данных, значения x и y) из графика??

Есть ли другой способ сделать это? Я хочу извлечь точки данных из графика, а затем отправить их из API-интерфейса фляги в пользовательский интерфейс (угловой 4)

Заранее спасибо!


person Abdullah Ahmed Ghaznavi    schedule 25.06.2018    source источник


Ответы (1)


734094 / 365,25 = 2009,8398. Это очень наводящее число для даты, которая, как я предполагаю, из вашего примера, 2010-11-18. Похоже, ваша информация о дате выражена в виде числа с плавающей запятой, где разница 1,0 соответствует одному дню: а исходной датой для значения 0,0 является 1 января 1 года нашей эры.

Вы могли бы попробовать написать функцию, которая считает с 01-01-1, или, может быть, вы могли бы найти ее в библиотеке. В качестве альтернативы вы можете посмотреть преобразованное значение для известной вам даты и работать оттуда.

person John Ladasky    schedule 25.06.2018
comment
Я не понял. если у a есть значение 734094.0, как я могу извлечь из него правильную дату. и даты не являются фиксированными, даты могут быть изменены в зависимости от данных. - person Abdullah Ahmed Ghaznavi; 25.06.2018
comment
Хорошо, я немного просмотрел ваши операторы импорта. Похоже, что mpld3 — это ответвление Matplotlib, предназначенное для включения в веб-страницы. Он больше не поддерживается активно. Если mpld3 действительно является оболочкой для Matplotlib, вас интересует способ, которым Matplotlib хранит информацию о датах. Вы захотите прочитать matplotlib.org/api/dates_api.html. (Продолжение...) - person John Ladasky; 25.06.2018
comment
Как я и предсказывал, выполняя арифметические действия, которые я показал вам: Matplotlib представляет даты с использованием чисел с плавающей запятой, указывающих количество дней с 0001-01-01 UTC, плюс 1. И, кроме того, я предсказал: существует ряд вспомогательных функций для преобразования между объекты datetime и даты Matplotlib... num2date(): преобразовать даты Matplotlib в объекты datetime. - person John Ladasky; 25.06.2018
comment
Большое спасибо за ваши ответы, позвольте мне проверить это, тогда я свяжусь с вами! - person Abdullah Ahmed Ghaznavi; 25.06.2018
comment
большое спасибо! это сработало! информация, которую вы дали мне в своих комментариях, очень полезна, спасибо за это. эта функция num2date мне помогла! :) - person Abdullah Ahmed Ghaznavi; 25.06.2018