Не могу правильно построить гистограммы в Seaborn
Начал строить гистограммы колонок датафрейма при помощи библиотеки seaborn. Однако, вместо классической гистограммы получил что-то такое
plt.figure(figsize=(17,12))
for i, data in enumerate(df.drop(labels=['School','School_Type'],axis=1).columns):
plt.subplot(2,3,i+1)
sns.histplot(x=df['School_Type'],y=data,data=df,binwidth=2)
Подскажите, как можно решить подобную проблему. Спасибо
Ответы (2 шт):
Интересно, что вы хотели получить? "Классическая гистограмма" - это подсчёт числа событий, распределённых по одной шкале. В обычной гистограмме вы не указываете ось y, значения по оси вычисляются автоматически.
В вашем случае шкал две:
- во-первых, вы разделяете данные по типам учебного заведения, задав
x=df['School_Type'] - во-вторых, вы разделяете данные по группам показателей по оси
y
В результате вы получаете именно то, что должны были получить - диаграмму, в которой число событий кодируется цветом, так как график двумерный.
Единственный вариант "классической гистограммы", который кажется мне разумным в вашей ситуации, это гистограмма с несколькими типами столбцов, вроде такой:

В seaborn такой тип гистограммы называется dodge. В вашем примере это могло бы быть так:
sns.displot(df, x="SAT", hue="School_Type", multiple="dodge")
В общем случае в цикле перебирайте имена колонок и подставляйте их в параметр x.
Спасибо Pak Uula, что напомнил про параметр hue=. Можно ещё вот так сделать, хотя результаты мне не совсем понятны, но, видимо, серое - это где данные совпадают, а где какого-то типа больше на сколько-то, там цветное. Данные искусственные, поскольку вы своих не предоставили:
sns.histplot(hue='School_Type',x=data,data=df,binwidth=2)
