Pandas:传递的轴数与要绘制的列数不匹配

kat*_*mer 2 python matplotlib pandas

我想将 pandas 数据框的三列绘制为 2x2 子图布局:

rand=np.random.random((12,6))
df=pd.DataFrame(columns=['a','b','c','d','e','f'],data=rand)
ax=df.loc[:,'a':'c'].plot(subplots=True,layout=(2,2))
Run Code Online (Sandbox Code Playgroud)

这给了我想要的结果(右下角有一个空图)。但是,如果我尝试使用以下方法向所有这些子图添加另一列

df.loc[:,'d':'f'].plot(subplots=True,ax=ax)
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

ValueError: The number of passed axes must be 3, the same as the output plot
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,而无需重新安排子图的布局?

Imp*_*est 5

的情况下

ax=df.plot(subplots=True,layout=(2,2))
Run Code Online (Sandbox Code Playgroud)

ax是一个包含 4 个元素的 2x2 数组。这些是 4 个轴,如果仅包含 3 列,最后一个轴是不可见的df。再次绘制 3 列时,您需要提供 3 个轴,而不是全部 4 个。一个选项是将ax数组索引到要使用的列数。

df2.plot(subplots=True,ax=ax.flatten()[:3])
Run Code Online (Sandbox Code Playgroud)

完整示例:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

rand=np.random.random((12,6))
df=pd.DataFrame(columns=['a','b','c','d','e','f'],data=rand)

ax=df.loc[:,'a':'c'].plot(subplots=True,layout=(2,2))
df.loc[:,'d':'f'].plot(subplots=True,ax=ax.flatten()[:3])

plt.show()
Run Code Online (Sandbox Code Playgroud)