matplotlib子图,x轴上有日期

时间:2017-11-01 05:28:11

标签: python datetime matplotlib plot subplot

我有几个像这样的数据框:

>>> roll_av.shape
Out[14]: (274, 2)

>>> roll_av.tail()
Out[12]: 
            week  month
Date              
2017-10-12 0.001 -0.016
2017-10-13 0.231  0.020
2017-10-16 0.180  0.018
2017-10-17 0.235  0.021
2017-10-18 0.187  0.020

>>> roll_av.index
Out[1]: Index([u'2016-08-11', u'2016-08-12', u'2016-08-13', u'2016-08-14', 
u'2017-06-08', ....... u'2017-10-16', u'2017-10-17', u'2017-10-18'],
  dtype='object', name=u'Date')

如果我这样做,我会得到一个x轴作为日期的情节:

roll_av.plot()

enter image description here

但是,如果我执行以下操作,则日期会消失。

fig = plt.figure(1)
for i in np.arange(4):
    ax = fig.add_subplot(221 + i)
    roll_avg = get_roll_avg(params)
    ax.plot(roll_av)

在执行此操作时,我收到错误:

    >>> ax.plot(roll_av.index,roll_av)
Traceback (most recent call last):

  File "C:\...\matplotlib\axes\_axes.py", line 1374, in plot
    self.add_line(line)
  File "C:\...\matplotlib\axes\_base.py", line 1504, in add_line
    self._update_line_limits(line)
  File "C:\...\matplotlib\axes\_base.py", line 1515, in _update_line_limits
    path = line.get_path()
  File "C:...\matplotlib\lines.py", line 874, in get_path
    self.recache()
  File "C:\...\matplotlib\lines.py", line 575, in recache
    x = np.asarray(xconv, np.float_)
  File "C:\...\numpy\core\numeric.py", line 460, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for float(): 2017-10-18

有没有简单的方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

如评论中所述,您的索引是一个字符串。在绘图之前,您可以轻松将其转换为datetime

roll_av.index = pd.to_datetime(roll_av.index)

您可以看到this answer用于控制日期刻度值/标签格式(如果感兴趣)。