Вам нужно будет добавить 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
здесь .