更改绘图类型时,“pandas.DataFrame.plot”返回的子图索引不一致

Inconsistent indexing of subplots returned by `pandas.DataFrame.plot` when changing plot kind

我知道,这个问题是已知的并且已经讨论过了。但是我遇到了一种奇怪的行为,可能有人知道为什么: 当我 运行 这个:

plot = df.plot(kind="box", subplots=True, layout= (7,4), fontsize=12, figsize=(20,40))
fig = plot[0].get_figure()
fig.savefig(str(path) + "/Graphics/" + "Boxplot_all.png")
plot

它工作得很好。

当我将 kind plot 更改为 ="line" 时,它给出了已知错误...但是为什么呢?没看懂...

plot = df.plot(kind="line", subplots=True, layout= (7,4), fontsize=12, figsize=(20,40))
fig = plot[0].get_figure()
fig.savefig(str(path) + "/Graphics/" + "Line_all.png")
plot

感谢您的想法和提示。 干杯戴夫

这似乎是 Pandas 中的一个不一致之处。根据他们的docs,的确,DataFrame的方法.plot()应该return

matplotlib.axes.Axes or numpy.ndarray of them

如果您选择 kind="line" 选项,则为真:

>>> df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                      columns=['a', 'b', 'c'])

>>> plot=df.plot(subplots=True, layout=(2,2),kind="line")

>>> type(plot)
numpy.ndarray

>>> plot.shape
(2, 2)

kind="box" 则不然,您会得到一个 pandas 系列:

>>> plot=df.plot(subplots=True, layout=(2,2),kind="box")

>>> type(plot)
pandas.core.series.Series

>>> plot.shape
(3,)

所以,如果使用 kind="line",你必须访问一个二维数组,所以你应该使用:

fig = plot[0,0].get_figure()