2017-02-16 9 views
0

Я могу построить мои значения столбцов dataframe pandas в виде подзаголовков в матрице 1XN.matplotlib и 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

Делать это дает мне ошибки (пример я хочу, чтобы просмотреть мои делянок в виде матрицы 2х2):

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

Когда подзаговоры являются 2- мерный, subplots возвращает фигуру и двумерный массив NumPy осей. Поэтому используйте

axs = axs.ravel() 

Чтобы сделать 2D-массив осей одномерным. Затем вы можете использовать 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').

+0

объяснения! это работает – jxn