Как подготовить морские участки как участок? - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу создать подзаговор для списка столбцов из фрейма данных. Однако, когда я запускаю приведенный ниже код, я получаю ошибку индексации, связанную с осями

TypeError: объект 'AxesSubplot' не поддерживает индексирование

%matplotlib inline
import seaborn as sns
import matplotlib.pyplot as plt
nr_rows = 1
nr_cols = 3

cols_review = ['home_ownership', 'verification_status', 'loan_status']
li_col_reviews = list(cols_review)

fig, axs = plt.subplots(nr_rows, nr_cols, figsize=(nr_cols*4,nr_rows*3))

for r in range(0,nr_rows):
    for c in range(0, nr_cols):  
        col = r*nr_cols+c
        if col < len(li_col_reviews):
            col_count = pdf[li_col_reviews[col]].value_counts()
            sns.set(style="darkgrid")
            sns.barplot(col_count.index, col_count.values, alpha=0.9,ax = axs[r][c])
            plt.ylabel('Number of Occurrences', fontsize=12)
            plt.xlabel(col, fontsize=12)
            plt.tight_layout()    
            plt.show() 

1 Ответ

0 голосов
/ 03 ноября 2018

Вам нужно будет добавить squeeze=False в строку plt.subplots

Здесь я изменил ваш код и использовал некоторые фиктивные данные. Также вы должны держать plt.show() вне цикла.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

nr_rows = 1
nr_cols = 3

cols_review = ['home_ownership', 'verification_status', 'loan_status']

fig, axs = plt.subplots(nr_rows, nr_cols, figsize=(nr_cols*4,nr_rows*3), squeeze=False)

for r in range(0,nr_rows):
    for c in range(0, nr_cols):  
        col = r*nr_cols+c
        if col < len(cols_review):
            x=np.random.rand(5) * 10
            y=np.random.rand(5)
            sns.set(style="darkgrid")
            sns.barplot(x, y, alpha=0.9,ax = axs[r][c])
            plt.ylabel('Number of Occurrences', fontsize=12)
            plt.xlabel(col, fontsize=12)
plt.tight_layout()    
plt.show()

Squeeze по умолчанию имеет значение True, что означает, что: extra dimensions are squeezed out from the returned array axs. И, следовательно, не может быть проиндексировано с [r][c]. Не сжимая (squeeze = False), вы гарантируете, что axs возвращается как двумерный массив, который затем может быть проиндексирован с помощью [r][c]

Возможно, вы захотите прочитать аргумент squeeze здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...