如何绘制 unix 时间戳
Posted
技术标签:
【中文标题】如何绘制 unix 时间戳【英文标题】:How to plot unix timestam 【发布时间】:2021-11-23 04:04:16 【问题描述】:我有一个由 sec.nsec(unix 时间?)确定的时间序列,其中信号为 0 或 1,我想将其绘制成方形信号。目前我有以下代码:
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()
这情节:
在绘制之前是否需要进行任何转换?我不能有日期:时间,因为这些点之间可能有 ns 到 ms
谢谢。
编辑:时间列表的值是字符串
【问题讨论】:
添加drawstyle='steps-pre'
到绘图工作。但是,这是绘制它的正确方法吗?
date = np.datetime64(time, 's')
应该为您提供 numpy datetime64 数组,而 Matplotlib 应该为您提供更好看的刻度。如果您不关心日期,那么您也可以只减去一天或小时之类的开始。
问题是我不是从 python 脚本中获取时间,而是从文件中获取时间。但是,只是为了测试您的建议,我尝试了date = np.datetime64(time[0], 's')
,但这会引发错误Could not convert object to NumPy datetime
。尽管如此,使用drawstyle='steps-pre'
仍然有效
对不起,您需要先转换为 int 才能传递给 datetime64。所以也许:date = np.datetime64(int(1e6*time[0]), 'us')
我刚刚编辑了这个问题。列表 time
由字符串 (sec.nsec) 组成。我在想的是我应该将 sec 和 nsec 分别转换为 int,然后将 sec 转换为 nsec 并将这两个数字一起转换....
【参考方案1】:
要将 unix 时间戳字符串转换为 datetime64,您需要先转换为 float,然后使用正确的单位转换为 datetime64:
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)
产量:
datetime64[s]
['2021-10-01T13:03:23' '2021-10-01T13:03:23' '2021-10-01T13:03:23'
请注意,纳秒已被删除。如果你想保留那些...
time = (np.asarray(time).astype(float)*1e9).astype('datetime64[ns]')
产量:
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']
这一切都有效,因为 datetime64 与 unix 时间戳 (1970-01-01T00:00:00.000000) 具有相同的“纪元”或零
完成此转换后,绘图应该可以正常工作。
【讨论】:
以上是关于如何绘制 unix 时间戳的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Shell 将 ISO 8601 时间戳转换为 Unix 时间戳?
如何在 kotlin 中将纪元时间戳转换为 unix 十六进制时间戳?