matplotlib“axis.invert_xaxis”在使用datetime时崩溃

时间:2013-05-09 07:35:26

标签: python matplotlib pandas

如果我运行以下代码:

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”命令,并且索引使用非日期时间值,它也能正常工作。

在绘制带有无序日期索引的数据框时,我看到了一些类似的错误报告(例如herehere),但这已在早期版本的pandas中修复。

有关变通方法的任何建议吗?我正在使用matplotlib 1.2.1和pandas 0.11.0

2 个答案:

答案 0 :(得分:2)

作为一种解决方法:在使用pandas的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()

更新:自熊猫0.12(2013年7月)发布以来,这已经修复(请参阅https://github.com/pydata/pandas/pull/3991https://github.com/pydata/pandas/issues/3990)。因此不再需要解决方法。

答案 1 :(得分:0)

尝试使用:plt.gca().invert_xaxis()