2

我有以下代码

 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(),你也会得到一个不正确的图片,但与第一个不正确的图片略有不同。(我会发布照片,但没有足够的声望点......)

为什么会这样?

4

2 回答 2

1

我已经导入matplotlib.pyplotplt.

这让他们在同一个数字上,我认为这就是你想要的。我基本上已经重新采样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>

默认情况下,这会更好地处理刻度标签:

在此处输入图像描述

于 2013-07-26T16:46:06.337 回答
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()
于 2013-07-26T16:20:54.410 回答