以下情节
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'))
小时在正确的时区呈现。
为什么?
答案 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_date
或xaxis_date
或您使用的任何内容中设置的所有内容。