在matplotlib

时间:2016-08-08 06:10:56

标签: python datetime pandas matplotlib

我经常在ipython shell或ipython笔记本中进行交互式工作。 说,我有pandas.DataFrame DatetimeIndex,如下所示:

idx = pd.date_range("12:00", periods=400000, freq="S")
df = pd.DataFrame({"temp":np.random.normal(size=len(idx))}, index=idx)

为了绘制它,我可以简单地做:

plt.plot(df.temp, '.')

enter image description here

正如我所看到的,我不必指定x轴数据,因为它是从DataFrame很好地推断出来的,我也不必指定我实际上希望x轴是基于日期的。 (plt.plot_date)的时代已经过去了 太棒了!

但x轴在两个方面看起来很丑:

  • 标签重叠且难以阅读。
  • 标签显示小时而非日期。

可以几乎修复此问题,例如像这样:

plt.plot(df.temp, '.')
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_formatter(
    mdates.DateFormatter('%d-%m-%Y %H:%M:%S'))
plt.gcf().autofmt_xdate()

正如在结果图中可以看到的那样,最左边的日期标签被剪裁。 leftmost date label is clipped

因此,通过将代码大小增加300%,几乎可以得到一个很好的情节。

现在问我的问题:

我可以为我的生活不记得这些2..3行,在制作基于日期的情节时我总是要输入。它使界面感觉笨拙和缓慢。我总是要谷歌寻求解决方案......

我能否以某种方式设置matplotlib,它会记住我的个人默认值与基于日期的绘图有关?

我想,我实际上可以入侵plot函数。但也许有一种方法可以使用这些我无法找到的matplotlib.rc_params

正如我上面所说,plt.plot对于实际猜测我想要的东西还有很长的路要走。它猜测x轴数据是DataFrame的索引..并且它猜测它应该实际绘制基于x轴的日期而不是日期的数字表示。我怎样才能添加一些东西?

我想甚至可能会给它一些提示:

plt.plot(df.temp, '.', date_fmt='%d-%m-%Y %H:%M:%S')

plt.plot(df.temp, '.', autofmt_xdate=True)

1 个答案:

答案 0 :(得分:2)

您可以使用DateFormatter

import matplotlib.dates as mdates

fig, ax = plt.subplots(figsize=(8,5))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y %H:%M:%S'))
#rotates the tick labels automatically
fig.autofmt_xdate()

ax.plot(df["T"], '.')

plt.show()

graph