我正在绘制一些格式为
的数据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
等处理的任何清理都将不胜感激。)