2012-10-23 22 views
6

Przy drukowaniu timeseries z wbudowaną funkcją fabuły pand, zdaje się ignorować strefę czasową mojego indeksu: zawsze używa czasu UTC dla osi X. Przykład:Funkcja wykresów pand ignoruje strefę czasową timeseries

import numpy as np 
import matplotlib.pyplot as plt 
from pandas import rolling_mean, DataFrame, date_range 

rng = date_range('1/1/2011', periods=200, freq='S', tz="UTC") 
data = DataFrame(np.random.randn(len(rng), 3), index=rng, columns=['A', 'B', 'C']) 
data_cet = data.tz_convert("CET") 

# plot with data in UTC timezone 
fig, ax = plt.subplots() 
data[["A", "B"]].plot(ax=ax, grid=True) 
plt.show() 

# plot with data in CET timezone, but the x-axis remains the same as above 
fig, ax = plt.subplots() 
data_cet[["A", "B"]].plot(ax=ax, grid=True) 
plt.show() 

Działka nie zmienia, mimo że wskaźnik ma:

In [11]: data.index[0] 
Out[11]: <Timestamp: 2011-01-01 00:00:00+0000 UTC, tz=UTC> 
In [12]: data_cet.index[0] 
Out[12]: <Timestamp: 2011-01-01 01:00:00+0100 CET, tz=CET> 

powinienem zgłosić błąd, czy mogę coś przeoczyć?

+0

[tutaj] (https://stackoverflow.com/a/46554146/2192488) jest jak ten błąd można obejść! –

Odpowiedz

5

To zdecydowanie błąd. Stworzyłem raport na temat github. Powodem jest to, że wewnętrznie pandy konwertują regularną częstotliwość DatetimeIndex na PeriodIndex, aby podłączyć do formaterów/lokalizatorów w pandach, a obecnie PeriodIndex NIE zatrzymuje informacji o strefach czasowych. Proszę czekać na poprawkę.

+3

4 lata później ... jakaś poprawka? – lukewitmer

+0

5 lat później i [nie naprawię!] (Https://github.com/pandas-dev/pandas/issues/2106#issuecomment-253302000) –

0

Jak radzić sobie z UTC lokalnym czasie konwersji

import time 
import matplotlib.dates 
… 
tz = pytz.timezone(time.tzname[0]) 
… 
ax.xaxis.set_major_locator(matplotlib.dates.HourLocator(interval=1, tz=tz)) 
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H', tz=tz)) 
Powiązane problemy