anon comp
anon comp

Reputation: 155

Time Series with Pandas, Python, and Plotly

I'm trying to create a data visualization that's essentially a time series chart. But I have to use Panda, Python, and Plotly, and I'm stuck on how to actually label the dates. Right now, the x labels are just integers from 1 to 60, and when you hover over the chart, you get that integer instead of the date.

I'm pulling values from a Google spreadsheet, and for now, I'd like to avoid parsing csv things.

I'd really like some help on how to label x as dates! Here's what I have so far:


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 (%)'}) ```

Upvotes: 0

Views: 132

Answers (1)

loginmind
loginmind

Reputation: 603

Right now, the x labels are just integers from 1 to 60, and when you hover over the chart, you get that integer instead of the date.

This happens because you are setting rand_x as x labels, and rand_x is an array of integer. Setting labels_dict={'X': 'Date', 'Y': 'Rate (%)'} only adding text Date before x value. What you need to do is parsing an array of datetime values into x. For example:

rand_x = np.array(['2020-01-01','2020-01-02','2020-01-03'], dtype='datetime64')

Upvotes: 0

Related Questions