更改绘图类型时,“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()
我知道,这个问题是已知的并且已经讨论过了。但是我遇到了一种奇怪的行为,可能有人知道为什么: 当我 运行 这个:
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
ornumpy.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()