Не могу правильно построить гистограммы в 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 шт):

Автор решения: Pak Uula

Интересно, что вы хотели получить? "Классическая гистограмма" - это подсчёт числа событий, распределённых по одной шкале. В обычной гистограмме вы не указываете ось y, значения по оси вычисляются автоматически.

В вашем случае шкал две:

  • во-первых, вы разделяете данные по типам учебного заведения, задав x=df['School_Type']
  • во-вторых, вы разделяете данные по группам показателей по оси y

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

Единственный вариант "классической гистограммы", который кажется мне разумным в вашей ситуации, это гистограмма с несколькими типами столбцов, вроде такой: введите сюда описание изображения

В seaborn такой тип гистограммы называется dodge. В вашем примере это могло бы быть так:

sns.displot(df, x="SAT", hue="School_Type", multiple="dodge")

В общем случае в цикле перебирайте имена колонок и подставляйте их в параметр x.

→ Ссылка
Автор решения: CrazyElf

Спасибо Pak Uula, что напомнил про параметр hue=. Можно ещё вот так сделать, хотя результаты мне не совсем понятны, но, видимо, серое - это где данные совпадают, а где какого-то типа больше на сколько-то, там цветное. Данные искусственные, поскольку вы своих не предоставили:

sns.histplot(hue='School_Type',x=data,data=df,binwidth=2)

введите сюда описание изображения

→ Ссылка