Проблема возникает при передаче ax=axes[y]
в boxplot
. axes
- это массив 2-d numpy с формой (2, 3), который содержит сетку осей Matplotlib, которую вы запросили. Таким образом, axes[y]
является массивом 1-d numpy, который содержит три объекта Matplotlib AxesSubplot
. Я подозреваю, что boxplot
пытается передать этот аргумент, и ожидает, что это будет объект с методом boxplot
. Вы можете исправить это, индексировав axes
с соответствующей строкой и столбцом, который вы хотите использовать.
Вот ваш сценарий с небольшим изменением для этого:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
d = {'col1': [1, 2, 5.5, 100], 'col2': [3, 4, 0.2, 3], 'col3': [1, 4, 6, 30], 'col4': [2, 24, 0.2, 13], 'col5': [9, 84, 0.9, 3]}
df = pd.DataFrame(data=d)
names = list(df.columns)
f, axes = plt.subplots(round(len(names)/3), 3)
y = 0;
for name in names:
i, j = divmod(y, 3)
sns.boxplot(x=df[name], ax=axes[i, j])
y = y + 1
plt.tight_layout()
plt.show()
Сюжет то есть генерирует это