2013-05-09 2 views
2

Если я запускаю следующий код:Matplotlib «axis.invert_xaxis» сбой при использовании DateTime

import pandas as pd 
from datetime import datetime 
import numpy as np 
import matplotlib.pyplot as plt 

#df = pd.DataFrame(np.random.randn(3,1), index=[8,9,10], columns=['test']) 
df = pd.DataFrame(np.random.randn(3,1), index=[datetime(2012,8,1),datetime(2012,9,1),datetime(2012,10,1)], columns=['test']) 
fig = plt.figure() 
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) 
ax1.invert_xaxis() 
ax1.plot(df.index, df['test']) 
fig.show() 

я получаю исключение: команда

RuntimeError: MillisecondLocator estimated to generate 5270400 ticks from 2012-08-01 00:00:00+00:00 to 2012-10-01 00:00:00+00:00: exceeds Locator.MAXTICKS* 2 (2000) 

Он отлично работает, если я отключить «invert_xaxis» , а также если индекс использует значения, отличные от Datetime.

Я видел некоторые аналогичные ошибки (например, here и here) при построении рамки данных с индексом даты не по порядку, но это было исправлено в более ранней версии панд.

Любые предложения по обходному пути? Я использую Matplotlib 1.2.1 и панда 0.11.0

ответ

2

В качестве обходного пути: он работает для меня при использовании метода plot панд, и при вызове invert_xaxis потом:

fig = plt.figure() 
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) 
df.plot(ax=ax1) 
ax1.invert_xaxis() 
fig.show() 

ОБНОВЛЕНИЕ: теперь это исправлено с момента выпуска pandas 0.12 (июль 2013 г.) (см. https://github.com/pydata/pandas/pull/3991 и https://github.com/pydata/pandas/issues/3990). Поэтому обходной путь больше не нужен.

Смежные вопросы