Matplotlib忽略时区

时间:2014-09-03 23:03:56

标签: python matplotlib

以下情节

import matplotlib
f= plt.figure(figsize=(12,4))
ax = f.add_subplot(111)
df.set_index('timestamp')['values'].plot(ax=ax)
ax.xaxis.set_major_locator(matplotlib.dates.HourLocator(interval=1))
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%I'))
plt.show()

即使我有:

,也会在错误的区域(GMT)中呈现小时
> df['timestamp'][0]
Timestamp('2014-09-02 18:37:00-0400', tz='US/Eastern')

事实上,如果我注释掉这一行:

ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%I'))

小时在正确的时区呈现。

为什么?

2 个答案:

答案 0 :(得分:6)

我认为您可以通过在rcParams中设置时区来获得所需的功能:

import matplotlib
matplotlib.rcParams['timezone'] = 'US/Eastern'

格式化程序可识别时区,并将时间戳转换为您的rcParams时区(可能是UTC),而如果您不对其进行格式化,则只需要时间戳并忽略时区。如果我理解正确的话。

更多阅读:

答案 1 :(得分:5)

如果您不想更改rcParams(这似乎是一个简单的修复),那么您可以将时区传递给mdates.DateFormatter

from dateutil import tz
mdates.DateFormatter('%H:%M', tz=tz.gettz('Europe/Berlin'))

问题在于mdates.DateFormatter完全忽略了您在plot_datexaxis_date或您使用的任何内容中设置的所有内容。