如何使用matplotlib绘制Unix时间戳格式的0-1方波时序信号
问题解决方案
1. 必须做时间转换的原因
你当前代码中time列表存储的是字符串类型,matplotlib默认会将其识别为离散的分类标签,只会按列表顺序均匀排列x轴刻度,不会根据时间数值的真实差计算间距,完全无法体现纳秒/毫秒级的间隔差异。
2. 转换方法
不需要转成标准datetime格式,直接将字符串转为float类型即可,Unix时间戳的浮点形式可以完整保留纳秒级精度,完全满足你的需求。
3. 方波绘制优化
默认的线性插值折线不会得到方波效果,需要给plot函数添加drawstyle="steps-post"(或steps-pre,根据你需要的信号跳变位置选择)参数,直接生成阶梯状方波。
修正后代码
from matplotlib.pyplot import * # 字符串转浮点型时间戳 time = [float(t) for t in ['1633093403.754783918', '1633093403.755350983', '1633093403.760918965', '1633093403.761298577', '1633093403.761340378', '1633093403.761907443']] data = [1, 0, 1, 0, 1, 0] # 指定阶梯绘制模式,drawstyle可选steps-pre/steps-post/steps-mid plot(time, data, drawstyle='steps-post') # 可选:x轴刻度格式优化,避免显示科学计数法 gca().xaxis.set_major_formatter(lambda x, pos: f"{x:.9f}") show()
可选优化说明
如果觉得x轴显示的长串数值可读性差,可以把时间转为相对于第一个时间点的偏移量(单位取毫秒/微秒),代码调整如下:
# 以第一个时间点为零点,偏移量单位为微秒 base_t = time[0] time_offset = [(t - base_t)*1e6 for t in time] plot(time_offset, data, drawstyle='steps-post') xlabel('时间偏移量 (μs)')
内容的提问来源于stack exchange,提问作者aripod
相关产品推荐
相关产品推荐

