我有以下代码
ser = pandas.Series(range(5),index=pandas.date_range('20130722','20130726',freq='D'))
ser1 = pandas.Series( range(4,9), index = ser.index + datetime.timedelta(days=3))
当我一个接一个地绘制它们(ser.plot()
,然后ser1.plot()
)时,我得到了正确的图片。
现在按如下方式更改ser1的定义
ser1 = pandas.Series( range(4,9), index = ser.index + datetime.timedelta(days=3.1))
并重复两个绘图命令(按照与上面相同的顺序)。我得到的图片只显示了ser1,x轴表示" 27 Jul 3982"。如果您先进行ser1.plot()
然后ser.plot()
,则会得到错误的图片,但与第一个不正确的图片略有不同。 (我会发布图片,但没有足够的声望点......)
为什么会这样?
答案 0 :(得分:1)
我已将matplotlib.pyplot
导入plt
。
这让他们看到了相同的数字,我认为这就是你想要的。我基本上将ser1
重新采样到ser
的较低频率时间戳。您可以使用In [33]: ser1.resample('D', how='mean')
明确地执行此操作,但在这种情况下无关紧要,因为每天只有一个观察点。重要的是,如果你试图把它们放在同一个地块上,它们会共享相同的x轴单位。
In [25]: fig = plt.figure()
In [26]: ax = fig.add_subplot(111)
In [27]: ax.plot(ser.index.date, ser)
Out[27]: [<matplotlib.lines.Line2D at 0x10616e150>]
In [28]: ax.plot(ser1.index.date, ser1)
Out[28]: [<matplotlib.lines.Line2D at 0x107981050>]
In [29]: plt.draw()
如果你想完全避免使用matplotlit,首先加入这两个系列并在生成的DatFrame上调用plot:
In [37]: pd.concat([ser, ser1.resample('D', how='mean')], axis=1).plot()
Out[37]: <matplotlib.axes.AxesSubplot at 0x1064aa190>
默认情况下,它会更好地处理刻度标签:
答案 1 :(得分:0)
我认为你无法控制你的阴谋。当您绘制下一个情节时......您可能会覆盖之前的情节。
尝试以下方法......
figure()
ser = pandas.Series(range(5),index=pandas.date_range('20130722','20130726',freq='D'))
ser.plot()
figure()
ser1 = pandas.Series( range(4,9), index = ser.index + datetime.timedelta(days=3))
ser1.plot()
figure()
ser1 = pandas.Series( range(4,9), index = ser.index + datetime.timedelta(days=3.1))
ser1.plot()