我试图重新创建一个带有标签的时间序列多列的示例,如pandas文档中所示:http://pandas.pydata.org/pandas-docs/dev/visualization.html#visualization-basic(第二张图)
这是我的代码:
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()
我确实得到了结果。
有没有办法调试这个,找出这里出了什么问题?
答案 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")