aripod
aripod

Reputation: 57

How to plot unix timestam

I have a time serie determined by sec.nsec (unix time?) where a signal is either 0 or 1 and I want to plot it to have a square signal. Currently I have the following code:

from matplotlib.pyplot import *

time = ['1633093403.754783918', '1633093403.755350983', '1633093403.760918965', '1633093403.761298577', '1633093403.761340378', '1633093403.761907443']
data = [1, 0, 1, 0, 1, 0] 

plot(time, data)
show()

This plots: enter image description here

Is there any conversion needed for the time before plotting? I cannot have date:time as this points might have ns to ms between them

Thank you.

EDIT: The values of the list for time are strings

Upvotes: 0

Views: 512

Answers (1)

Jody Klymak
Jody Klymak

Reputation: 5912

To convert unix timestamp strings to datetime64 you need to fist convert to float, and then convert to datetime64 with the correct units:

time = ['1633093403.754783918', '1633093403.755350983', '1633093403.760918965', '1633093403.761298577', '1633093403.761340378', '1633093403.761907443']
time = (np.asarray(time).astype(float)).astype('datetime64[s]')
print(time.dtype)
print(time)

yields:

datetime64[s]
['2021-10-01T13:03:23' '2021-10-01T13:03:23' '2021-10-01T13:03:23'

Note the nanoseconds have been stripped. If you want to keep those...

time = (np.asarray(time).astype(float)*1e9).astype('datetime64[ns]')

yields:

datetime64[ns]
['2021-10-01T13:03:23.754783744' '2021-10-01T13:03:23.755351040'
 '2021-10-01T13:03:23.760918784' '2021-10-01T13:03:23.761298688'
 '2021-10-01T13:03:23.761340416' '2021-10-01T13:03:23.761907456']

This all works because datetime64 has the same "epoch" or zero as unix timestamps (1970-01-01T00:00:00.000000)

Once you do this conversion, plotting should work fine.

Upvotes: 0

Related Questions