Seaborn автоматически масштабирует ось Y

#python #matplotlib #seaborn

Вопрос:

Я использую Сиборна для построения некоторых данных.

Проблема, с которой я сталкиваюсь, заключается в том, что ось Y автоматически масштабируется и не показывает фактические числа.

 survive_count = sns.barplot(x="Pclass", y='Survived', data=df)
 

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

Каким может быть возможное решение для устранения этого?

После нескольких предложений я попытался

 survive_count = sns.countplot(x="Pclass", hue='Survived', data=df)
survive_count.figure.savefig(my_path   '/Class vs Survival Count.png')
 

Но, к сожалению, я столкнулся с другой проблемой

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

Я действительно не понимаю, почему у меня такое перевернутое изображение.

Чтобы решить эту проблему, я попытался

 plt.gca().invert_yaxis()
 

и

 plt.ylim(reversed(plt.ylim()))
 

Но оба решения не сработали.

Комментарии:

1. Не machine-learning вопрос, пожалуйста, не спамьте нерелевантные теги (удалены).

2. На данный момент трудно сказать. Поскольку я все еще сталкиваюсь с ненормальным поведением библиотеки Сиборна. Я обновлю то, что я сделал, и результат, который я получаю

3. Этот вопрос все еще открыт? Или на него ответили сейчас?

Ответ №1:

Возможно, вам захочется использовать график подсчета. По умолчанию столбчатая диаграмма усредняет значения.

 import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('titanic')
ax = sns.countplot(x="pclass", data=df[df['survived'] == 1])
plt.show()
 

пример графика подсчета

Или с помощью hue :

 sns.set_theme("paper")
df = sns.load_dataset('titanic')
ax = sns.countplot(x="pclass", hue="survived", data=df)
 

график подсчета с оттенком

Комментарии:

1. Большое спасибо за вашу помощь. Ваше предложение частично помогло мне. К сожалению, сейчас я столкнулся с еще одной забавной проблемой. Используя sns.countplot, я получаю перевернутую ось y без масштаба. Я использовал plt.ylim(обратный(plt.ylim())) для инвертирования оси, но по-прежнему не помогал с маркерами.

2. Обе проблемы очень необычны, они, безусловно, не являются поведением по умолчанию. Трудно понять, что вы делаете не так, не видя кода. Можете ли вы отредактировать сообщение с вопросом и добавить код для воспроизводимого примера?

Ответ №2:

причина, по которой я предполагаю, заключается в том, что столбчатая диаграмма seaborns отражает среднее значение категории. Пожалуйста, посмотрите, поможет ли вам какой-либо из приведенных ниже кодов.

 survive_count = sns.barplot(x="Pclass", y='Survived', data=df, estimator=sum)
 
 survive_count = sns.barplot(x="Pclass", y='Survived', data=df, estimator=len)
 
 from numpy import count_nonzero
survive_count = sns.barplot(x="Pclass", y='Survived', data=df, estimator= count_nonzero)
 

Комментарии:

1. Большое спасибо, @aj7amigo, оба варианта оценки с sum и len работают. Хотя смысл у обоих разный. Мы можем использовать любой из них в зависимости от наших требований. count_nonzero не работает и выдает синтаксическую ошибку.

2. @RajRajeshwariPrasad — для 3-го варианта вам необходимо импортировать следующее. from numpy import count_nonzero Тогда, я надеюсь, это должно сработать. Вы правы, какой вариант выбрать, полностью зависит от варианта использования.