Pandas:使用标签绘制时间序列的多个列(来自 Pandas 文档的示例)

4
我正在尝试重现在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()

我确实得到了结果。

有没有一种方法可以调试它,找出这里出了什么问题?

1个回答

4

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

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

我得到了正确的输出。当绘制一个Series时,如果没有传递轴参数,它会使用当前轴。
但是看起来pandas文档在这方面并不完全正确(因为它们使用了plt.figure()),我已经报告了这个问题:https://github.com/pydata/pandas/issues/8776
另一个选择是使用ax参数提供一个轴对象:
fig = plt.figure()
ts.plot(ax=plt.gca())  # 'get current axis'
fig.savefig("x.png")

或者稍微简洁一些(在我看来):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接