pandas:用标签绘制时间序列的多个列(pandas文档中的示例)

时间:2014-11-10 14:10:49

标签: python matplotlib pandas

我试图重新创建一个带有标签的时间序列多列的示例,如pandas文档中所示:http://pandas.pydata.org/pandas-docs/dev/visualization.html#visualization-basic(第二张图)

multiple columns of a timeseries with labels

这是我的代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

ts = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2000', periods=1000), columns=list('ABCD'))
ts = ts.cumsum()
fig = plt.figure()

print ts.head()
ts.plot()
fig.savefig("x.png")

文本输出似乎没问题:

                   A         B         C         D
2000-01-01  1.547838 -0.571000 -1.780852  0.559283
2000-01-02  1.165659 -1.859979 -0.490980  0.796502
2000-01-03  0.786416 -2.543543 -0.903669  1.117328
2000-01-04  1.640174 -3.756809 -1.862188  0.466236
2000-01-05  2.119575 -4.590741 -1.055563  1.004607

但x.png始终为空。

如果我只绘制一列:

ts['A'].plot()

我确实得到了结果。

有没有办法调试这个,找出这里出了什么问题?

1 个答案:

答案 0 :(得分:3)

您没有得到结果的原因是因为您没有保存正确的'图:你正在制作一个plt.figure()的数字,但是大熊猫没有在当前的数字上绘图,并且会创建一个新的数字。
如果你这样做:

ts.plot()
fig = plt.gcf()  # get current figure
fig.savefig("x.png")

我得到了正确的输出。在绘制系列时,如果没有轴通过, 会使用当前轴 但似乎大熊猫文档在该帐户上并不完全正确(因为他们使用plt.figure()),我报告了一个问题:https://github.com/pydata/pandas/issues/8776

另一个选择是使用ax参数提供一个axis对象:

fig = plt.figure()
ts.plot(ax=plt.gca())  # 'get current axis'
fig.savefig("x.png")

或略微清洁(IMO):

fig, ax = plt.subplots()
ts.plot(ax=ax)
fig.savefig("x.png")