Python 熊猫:使用标签绘制时间序列的多列(熊猫文档中的示例)

Python 熊猫:使用标签绘制时间序列的多列(熊猫文档中的示例),python,matplotlib,pandas,Python,Matplotlib,Pandas,我正在尝试重新创建一个示例,该示例使用pandas文档中所示的标签绘制timeseries的多个列:(第二个图) 这是我的密码: 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'))

我正在尝试重新创建一个示例,该示例使用pandas文档中所示的标签绘制timeseries的多个列:(第二个图)

这是我的密码:

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()
我确实得到了一个结果


是否有办法对此进行调试,以找出问题所在?

您没有得到结果的原因是您没有保存“正确”的图形:您正在使用
plt.figure()
制作一个图形,但pandas不会在当前图形上绘图,并将创建一个新图形。
如果您这样做:

ts.plot()
fig = plt.gcf()  # get current figure
fig.savefig("x.png")
我得到了正确的输出。打印序列时,如果没有轴通过,则使用当前轴。
但熊猫文档似乎在这方面并不完全正确(因为它们使用了
plt.figure()
),我报告了一个问题:

另一个选项是使用
ax
参数提供轴对象:

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")