如何正确设置pyplot以在给定时区内绘制日期? 我可以看到放置tzinfo对象的各个地方,但所有这些都不做任何事情或者没有按预期远程工作。我从csv加载一个记录列表,每个记录是[以UTC为单位的天真时间戳,要绘制的数字]
import pytz
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
estZone=pytz.timezone('US/Eastern')
records=[['10/10/17 12:00','100'],['11/10/17 12:00','150'],['12/10/17 12:00','200']]
def parseDT(stampString):
return datetime.strptime(stampString,'%d/%m/%y %H:%M')
def plotGraph():
xvalues=[]
yvalues=[]
for r in records:
rdatetime=(parseDT(r[0])) #parseDT just returns naive DT
rdatetime=pytz.utc.localize(rdatetime)
rdatetime=rdatetime.astimezone(tz=estZone)
xvalues.append(rdatetime)
yvalues.append(int(r[1]))
fig,ax=plt.subplots(figsize=(8,3))
plt.plot_date(xvalues,yvalues,ls='solid',lw=1.5,aa=True,marker='None',color='g')
dayFmt=mdates.DateFormatter('%a-%b-%d')
hrFmt=mdates.DateFormatter('%H:00')
ax.xaxis.set_major_formatter(dayFmt)
ax.xaxis.set_major_locator(mdates.DayLocator())
ax.xaxis.set_minor_locator(mdates.HourLocator(byhour=[6,12,18]))
ax.xaxis.set_minor_formatter(hrFmt)
plt.grid(b=True, which='both',linestyle='dotted')
plt.show()
plotGraph()
这会产生(减去一些格式)这个数字:
这实际上仍然是UTC。如果我省略了astimezone(tz=estZone)
,即使我已经确认该部分确实正常运行,但结果与结果完全相同。
如果我继续将tz=estZone
传递给plt.plot_date
,则数字相同。没有变化。如何更改此设置以从我的UTC时间戳创建EST图?
答案 0 :(得分:0)
之前我尝试将时区传递给日期格式的x轴标签,但是在放置定位器之后似乎应用了时区修改器,使所有标签在每个午夜或指定的小时后读取4小时。我已经意识到定位器还需要时区作为参数来抵消这种情况。那就做了。
答案 1 :(得分:0)
过去一个小时我也一直在经历这个:源数据有正确的时区,但 Matplotlib 忽略了它。修复方法是将时区传递给定位器和格式化程序。
示例代码说明:
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=1, tz=local_tz))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y', tz=local_tz))