The code in below plots a Pandas Time Series with milliseconds unit.
However, Matplotlib stores this milliseconds timestamp as float64 internally, so that I can reformat them to hh:mm:ss as shown in below. Does anyone know how to manually convert Pandas timestamp to Matplotlib's float64 format? Thanks
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
x = np.arange(5000)
df = pd.DataFrame(x, columns=['y'])
df['timestamp'] = pd.to_datetime(df.index, unit='ms')
df.set_index('timestamp', inplace=True)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(df.index, df.y)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
Matplotlib stores date in float64 format
print(ax.get_xlim())
>> (-2.892939814814815e-06, 6.075173611111111e-05)
print(type(ax.get_xlim()[0]))
>> numpy.float64
print(df.index[0]) # how to convert to -2.892939814814815e-06
>> 1970-01-01 00:00:00
print(df.index[-1]) # how to convert to 6.075173611111111e-05
>> 1970-01-01 00:00:04.999000
The mdates.date2num() doesn't work either
print(mdates.date2num(df.index[0]))
>> 0.0
print(mdates.date2num(df.index[-1]))
>> 5.785879629629629e-05
Final Update:
Sorry, I was wrong. The mdates.date2num() actually works! Initially I thought ax.get_xlim() was returning (x[0], x[-1]), but it actually returns something before x[0], and something after x[-1] so that the figure has some padding around the line. That's why it returns (-2.892939814814815e-06, 6.075173611111111e-05) instead of (0.0, 5.785879629629629e-05). Now I finally get it. Thanks guys!!

