Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib timedelta64 index as x-axis

I want to plot a dataframe, which has a timedelta64 index with the index on the x-axis.

The index looks like this:

In [75]: test.index
Out[75]: 
TimedeltaIndex([       '00:00:00', '00:00:00.020000', '00:00:00.040000',
                '00:00:00.060000', '00:00:00.080000', '00:00:00.100000',
                '00:00:00.120000', '00:00:00.140000', '00:00:00.160000',
                '00:00:00.180000',
                ...
                '07:29:31.660000', '07:29:31.680000', '07:29:31.700000',
                '07:29:31.720000', '07:29:31.740000', '07:29:31.760000',
                '07:29:31.780000', '07:29:31.800000', '07:29:31.820000',
                '07:29:31.840000'],
               dtype='timedelta64[ns]', name='master', length=923486, freq=None)

When I plot this dataframe simply with:

plt.plot(test)

I would expect to get the timedeltaindex on the x-axis. However, instead I'm just getting this on the x-axis:

enter image description here

How can I get my TimedeltaIndex on the x-axis instead?

like image 1000
Frank Avatar asked Jun 06 '18 09:06

Frank


1 Answers

First of all you may use pandas directly to plot the data. I.e. instead of plt.plot(df) you can use

df.plot()

This would show the correct timedelta on the axis.

If for any reason you need to use matplotlib for plotting, e.g. because you have unequally spaced timestamps, you need to convert the TimedeltaIndex to an absolute datetime. Choosing some (arbitrary) start you may add the deltas to the start to get some absolute datetime.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

index = pd.to_timedelta(np.arange(50,100), unit='s')

df = pd.DataFrame(np.arange(50), index=index)

start=pd.Timestamp('20180606')
plt.plot(start+df.index, df)

plt.show()
like image 58
ImportanceOfBeingErnest Avatar answered Oct 20 '22 21:10

ImportanceOfBeingErnest