matplotlib和pandas在新行上绘制子图

时间:2017-02-16 22:21:25

标签: python pandas matplotlib plot

我可以在 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])

enter image description here

这样做会给我带来错误(例如我想将我的子图视为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'

1 个答案:

答案 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')