将大整数时间戳转换为datetime格式以解决Matplotlib轴溢出错误
解决方案:纳秒级时间戳转Datetime适配Matplotlib X轴
核心问题原因
你拿到的是纳秒级时间戳(示例值为19位整数,对应1970年以来的纳秒数),Matplotlib在处理这类超大整数时会触发底层类型转换溢出——它默认期望的是秒/毫秒级小整数,或是直接的datetime对象。
三种可行解决方法
方法1:转成Python datetime对象(最直接)
把纳秒时间戳除以1e9转成秒级浮点数,再用datetime.fromtimestamp生成datetime对象,Matplotlib原生支持这类对象作为X轴:
import datetime timestamp_list = [1642636800000000000, 1649203200000000000, 1649462400000000000] # 转换为datetime列表 datetime_x = [datetime.datetime.fromtimestamp(ts / 1e9) for ts in timestamp_list] # 绘图示例 import matplotlib.pyplot as plt plt.plot(datetime_x, your_y_data) plt.xticks(rotation=45) plt.show()
方法2:用numpy datetime64类型(适配原numpy数组场景)
如果最初是从numpy datetime数组转成的列表,不如直接用numpy将时间戳转回datetime64[ns]类型,Matplotlib对numpy的时间类型支持很好:
import numpy as np timestamp_list = [1642636800000000000, 1649203200000000000] # 转成numpy int64数组,再转为纳秒级datetime64 ts_array = np.array(timestamp_list, dtype=np.int64) dt_array = ts_array.astype('datetime64[ns]') # 直接用numpy datetime数组绘图 plt.plot(dt_array, your_y_data) plt.xticks(rotation=45) plt.show()
方法3:转成秒级整数+手动设置X轴格式
如果坚持用整数作为X轴数据,把纳秒戳整除10**9转成秒级整数,再通过Matplotlib的日期格式化工具把X轴显示为datetime格式:
import matplotlib.pyplot as plt import matplotlib.dates as mdates timestamp_list = [1642636800000000000, 1649203200000000000] # 转成秒级整数 seconds_x = [ts // 10**9 for ts in timestamp_list] # 绘图并设置X轴格式 plt.plot(seconds_x, your_y_data) # 设置日期显示格式 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) # 设置刻度间隔(比如每30天一个刻度) plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=30)) plt.xticks(rotation=45) plt.show()
内容的提问来源于stack exchange,提问作者erfanvahdat
相关产品推荐
相关产品推荐

