Сокращение оси x для создания нескольких графиков с помощью seaborn?

#pandas #matplotlib #seaborn

#pandas #matplotlib #seaborn

Вопрос:

Следующий код в графическом виде на данный момент выглядит действительно беспорядочно. Причина в том, что у меня слишком много значений для ‘fare’. ‘Тариф’ варьируется от [0-500] с большинством значений в пределах первых 100.

 import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt



titanic = sns.load_dataset("titanic")



y =titanic.groupby([titanic.fare//1,'sex']).survived.mean().reset_index()




sns.set(style="whitegrid")
g = sns.factorplot(x='fare', y= 'survived', col = 'sex', kind ='bar' ,data= y,
               size=4, aspect =2.5 , palette="muted")
g.despine(left=True)
g.set_ylabels("Survival Probability")
g.set_xlabels('Fare')
plt.show()
  

Я хотел бы попробовать разделить «стоимость» графиков на подмножества, но хотел бы видеть все графики одновременно на одном экране. Мне было интересно, возможно ли это без необходимости прибегать к groupby.
Мне придется поиграть со значениями ‘fare’, чтобы увидеть, что я хотел бы, чтобы каждый график представлял, но для примера давайте разбить график на эти значения ‘fare’.

 [0-18]
[18-35]
[35-70]
[70-300]
[300-500]
  

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

Возможно ли это с помощью Seaborn? Нужно ли мне много настраивать с помощью matplotlib? Спасибо.

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

1. Используйте pd.cut для определения категориальных ячеек тарифов и используйте их в качестве одной из переменных фасетирования в factorplot.

2. Спасибо, я сейчас играю с этим.

Ответ №1:

На самом деле я написал небольшое сообщение в блоге об этом некоторое время назад. Если вы строите гистограммы, вы можете использовать by ключевое слово:

 import matplotlib.pyplot as plt
import seaborn.apionly as sns

sns.set() #rescue matplotlib's styles from the early '90s

data = sns.load_dataset('titanic')
data.hist(by='class', column = 'fare')
plt.show()
  

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

В противном случае, если вы просто строите подсчеты значений, вам придется свернуть свою собственную сетку:

 def categorical_hist(self,column,by,layout=None,legend=None,**params):
  from math import sqrt, ceil
  if layout==None:
    s = ceil(sqrt(self[column].unique().size))
    layout = (s,s)

  return self.groupby(by)[column]
             .value_counts()
             .sort_index()
             .unstack()
             .plot.bar(subplots=True,layout=layout,legend=None,**params)


categorical_hist(data, by='class', column='embark_town')
  

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

Редактировать Если вам нужен коэффициент выживаемости по диапазону тарифов, вы могли бы сделать что-то вроде этого

 data.groupby(pd.cut(data.fare,10)).apply(lambda x.survived.sum(): x./len(x))
  

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

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

1. Спасибо. Но как бы я получил «живучесть» с левой стороны (ось y)? Есть ли способ управлять отметками по оси x, чтобы я мог вводить числа, на которые я хочу разделить график? Кстати, хороший блог. Я узнал о «unstack» =)

2. @moundra гистограмму, которой вы можете управлять осью x с помощью bins , смотрите в моей правке для определения выживаемости по диапазону тарифов

3. Кстати, как вы разместили изображение своего графика здесь? Обязательно ли было сначала сохранять изображение, а затем загружать на сайт и использовать эту ссылку?

4. @moundra На самом деле вы можете использовать copy paste, когда находитесь в диалоговом окне «загрузить изображение»

5. Спасибо. Я не знал, что это так просто.