我可以在 1XN 矩阵中轻松地将我的pandas数据帧列值绘制为子图。
但是,当我想在 MXN 矩阵上绘制它时,我会收到错误。
示例:
df_play = pd.DataFrame({'a':['cat','dog','cat'],
'b':['apple','orange','orange'],
'c':['boy','boy','girl'],
'd':['chair','table','desk']
},dtype='category')
fig, axs = plt.subplots(1,len(df_play.columns),figsize=(14,6))
for i,x in enumerate(df_play.columns):
df_play[x].value_counts().plot(kind='bar',ax=axs[i])
这样做会给我带来错误(例如我想将我的子图视为2X2矩阵):
fig, axs = plt.subplots(2,len(df_play.columns)/2,figsize=(14,6))
for i,x in enumerate(df_play.columns):
df_play[x].value_counts().plot(kind='bar',ax=axs[i])
AttributeError: 'numpy.ndarray' object has no attribute 'get_figure'
答案 0 :(得分:1)
当子图是二维的时,subplots
返回一个图形和一个二维NumPy轴数组。因此,请使用
axs = axs.ravel()
使二维轴数组成为一维的。然后,您可以根据需要使用axs[i]
索引axs
:
for i,x in enumerate(df_play.columns):
df_play[x].value_counts().plot(kind='bar',ax=axs[i])
axs.ravel()
枚举从顶行到底行的行从左到右的轴。要枚举从最左侧到最右侧列的列从上到下的轴,请使用axs.ravel(order='F')
。