Matplotlib忽略时区

Ame*_*ina 5 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()
Run Code Online (Sandbox Code Playgroud)

即使我有以下情况,也会在错误的区域(GMT)中显示小时:

> df['timestamp'][0]
Timestamp('2014-09-02 18:37:00-0400', tz='US/Eastern')
Run Code Online (Sandbox Code Playgroud)

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

ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%I'))
Run Code Online (Sandbox Code Playgroud)

在正确的时区中显示小时。

为什么?

Seb*_*ian 9

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

import matplotlib
matplotlib.rcParams['timezone'] = 'US/Eastern'
Run Code Online (Sandbox Code Playgroud)

格式化程序可以识别时区,并将时间戳转换为rcParams时区(可能是UTC),而如果不格式化,它将仅使用时间戳并忽略时区。如果我理解正确。

更多阅读:

  • 耶稣基督,那很难找到。问题:如果您使用mdates.DateFormatter,那么它将完全忽略由plot_date或xaxis_date设置的时区以及您使用的任何东西,除非您在其上使用tz参数 (2认同)

Dan*_*l F 6

如果您不想更改rcParams(这似乎很简单),则可以将时区传递给mdates.DateFormatter

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

问题是,mdates.DateFormatter完全忽略你喜欢设置一切plot_datexaxis_date任何你使用或。