Временные ряды с Pandas, Python и Plotly - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь создать визуализацию данных, которая по сути является диаграммой временного ряда. Но я должен использовать Panda, Python и Plotly, и я застрял на том, как на самом деле обозначать даты. Прямо сейчас метки x представляют собой целые числа от 1 до 60, и когда вы наводите курсор на диаграмму, вместо даты вы получаете это целое число.

Я извлекаю значения из электронной таблицы Google, а пока Я бы хотел избежать разбора CSV-объектов.

Мне бы очень хотелось, чтобы пометить, как помечать x как даты! Вот что у меня есть:


import pandas as pd

from matplotlib import pyplot as plt

import bpr

%matplotlib inline

import chart_studio.plotly as pl

import plotly.express as px

import plotly.graph_objects as go

f = open("../credentials.txt")

u = f.readline()

plotly_user = str(u[:-1])

k = f.readline()

plotly_api_key = str(k)

pl.sign_in(username = plotly_user, api_key = plotly_api_key)

rand_x = np.arange(61)

rand_x = np.flip(rand_x)

rand_y = np.array([0.91 , 1 , 1.24 , 1.25 , 1.4 , 1.36 , 1.72 , 1.3 , 1.29 , 1.17 , 1.57 , 1.95 , 2.2 , 2.07 , 2.03 , 2.14 , 1.96 , 1.87 , 1.25 , 1.34 , 1.13 , 1.31 , 1.35 , 1.54 , 1.38 , 1.53 , 1.5 , 1.32 , 1.26 , 1.4 , 1.89 , 1.55 , 1.98 , 1.75 , 1.14 , 0.57 , 0.51 , 0.41 , 0.24 , 0.16 , 0.08 , -0.1 , -0.24 , -0.05 , -0.15 , 0.34 , 0.23 , 0.15 , 0.12 , -0.09 , 0.13 , 0.24 , 0.22 , 0.34 , 0.01 , -0.08 , -0.27 , -0.6 , -0.17 , 0.28 , 0.38])

test_data = pd.DataFrame(columns=['X', 'Y'])

test_data['X'] = rand_x

test_data['Y'] = rand_y

test_data.head()

def create_line_plot(data, x, y, chart_title="Rate by Date", labels_dict={}, c=["indianred"]):

fig = px.line(

data,

x = x,

y = y,

title = chart_title,

labels = labels_dict,

color_discrete_sequence = c

)

fig.show()

return fig

fig = create_line_plot(test_data, 'X', 'Y', labels_dict={'X': 'Date', 'Y': 'Rate (%)'}) ```

1 Ответ

0 голосов
/ 16 февраля 2020

В настоящий момент метки x представляют собой целые числа от 1 до 60, и при наведении курсора на график вы получаете это число вместо даты.

Это происходит потому, что вы rand_x устанавливаются как метки x, а rand_x - это массив integer. Установка labels_dict={'X': 'Date', 'Y': 'Rate (%)'} только добавление текста Date перед значением x. Что вам нужно сделать, это разобрать массив значений datetime в x. Например:

rand_x = np.array(['2020-01-01','2020-01-02','2020-01-03'], dtype='datetime64')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...