Я думаю, у вас есть две проблемы.
Во-первых, plt.subplots(nrows=3, ncols=2)
возвращает объект фигуры и массив объектов осей, поэтому вы должны заменить эту строку на: fig, ax = plt.subplots(nrows=3, ncols=2)
. Объект ax
теперь является массивом объектов с осями 3x2.
Вы можете превратить это в 1-й массив с ax = ax.flatten()
, но, учитывая то, что, я думаю, вы пытаетесь сделать, я думаю, что легче сохранить как 3x2. (Между прочим, я предполагаю, что ncols=3
является опечаткой)
Во-вторых, как ответ Ewoud упоминает с seaborn
, вы передаете оси для построения графика в качестве аргумента вызова функции plot.
Я думаю, что вам подойдет следующее:
fig, ax = plt.subplots(nrows=3, ncols=2)
for i, feature in enumerate(list(df.columns.values)[:-1]):
# for each feature create two plots on the same row
sns.boxplot(data=df, x='survival_status_after_5yrs',y=feature, ax=ax[i, 0])
sns.violinplot(data=df, x='survival_status_after_5yrs', y=feature, ax=ax[i, 1])
plt.show()