python,numpy,matplotlib中时区信息之间的交互

时间:2014-02-18 22:51:03

标签: python datetime numpy matplotlib timezone

我正在绘制一些格式为

的数据
06:55:00.0 0.6002

即,hh:mm:ss.f(或strftime格式的"%H:%M:%S.%f")后跟浮点数。

我一直在阅读这些有点巴洛克式的咒语(简化建议欢迎!)

import datetime
import numpy as np

def makedt(timestr):
    return datetime.datetime.strptime(timestr, "%H:%M:%S.%f")

datetau = np.genfromtxt(fname, converters={0:makedt, 1:np.float}, 
              dtype={'names':('date', 'tau'), 'formats':('datetime64[s]', np.float)})

(事实上,我做了一些稍微复杂的事情,在datetime.datetime.combine()中使用makedt来获取正确的日期,而不是默认的1900年1月1日。)

我目前处于“HST”时区(更重要的是,我的电脑是),这些数据实际上是参考该时区。我的理解是假设数据来自 local 时区dateutil.tz.tzlocal(),它是根据时区的系统值设置的。

为了绘制数据,我可以做类似的事情

import matplotlib.pyplot as plt
import dateutil

mytz = dateutil.tz.tzlocal()
fig, ax = plt.subplots()
ax.plot_date(datetau['date'].astype(datetime.datetime), datetau['tau'], tz=mytz)

请注意,我需要 tz=mytz,否则数据会转移到错误的时间/日期,即默认的matplotlib值(通常是UTC,或者在{ {1}}) - 如果我实际上不是HST,那将会更复杂(或者至少在技术上不正确)。这不是那么糟糕。但事实上,如果我想玩刻度线和标签,我需要为每个时间区指定时区,如:

matplotlibrc

它并不是非常繁重,但它似乎很脆弱,因为正如我上面所说的那样,读取时的默认行为是假设本地时区。如果您在读取数据和绘制数据之间移动计算机会发生什么? (我不知道当地的TZ是否有变化!)

我真正想做的就是告诉python / numpy / matplotlib在这种情况下从不担心时区信息。这可能吗?

(另外,除此之外,对上述ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%m-%d %H:%M" ,tz=hst)) vs datetime等处理的任何清理都将不胜感激。)

0 个答案:

没有答案