Почему set_titles не создает заголовок (Seaborn и Factorplot)?

#pandas #matplotlib #seaborn

#pandas #matplotlib #seaborn

Вопрос:

Вот код, который я использую. Это автономный код, который можно копировать и вставлять.

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



### Load the Titanic dataset
titanic = sns.load_dataset("titanic")

### Divide the data by sex; male and female

male = titanic[titanic.sex == 'male']
female = titanic[titanic.sex == 'female']




### Now use groupby to group by fare//5 and then create a column with the  survival rate for each group

male_chart= male.groupby([male.fare // 5]).survived.mean().reset_index()
female_chart= female.groupby([female.fare // 5]).survived.mean().reset_index()



#Plot male_chart
sns.set(style="whitegrid")
g = sns.factorplot(x='fare', y= 'survived',  data=male_chart,
               size=6, aspect =3 ,kind="bar", palette="muted")

g.despine(left=True)
g.set_ylabels("Survival Probability")
g.set_xlabels('Fare *5')
g.set_titles('Males')   # set_title doesn't produce "Males" on the chart itself



#sns.plt.title('Males')   #This code seems to work but not sure why it does. 


#plot: female_chart

h= sns.factorplot(x='fare', y= 'survived',  data=female_chart,
               size=6, aspect =3 ,kind="bar", palette="muted")
h.despine(left=True)
h.set_ylabels("survival probability")
h.set_xlabels('fare *5')
h.set_titles('Females')  #Once again doesn't work.
#sns.plt.title('Females')  #but this works
plt.show()
  

Я не получаю никаких ошибок при запуске строки «set_titles», но она не выдает заголовок на самом графике.
Как я неправильно использую set_title? Спасибо за всю вашу помощь.

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

1. set_titles используется, когда у вас есть огранка col / row , которую вы здесь не используете. Вы хотите g.ax.set_title() .

2. Я делаю это, когда хочу сообщить полезную информацию, но у меня нет времени написать полный ответ.

Ответ №1:

set_titles («имя_заголовка») работает только в FacetGrid тех случаях, когда у вас есть x столбцов или y строк.

(Например)

 facet_grid = sns.relplot(data=data, x = "X", y = "Y", col = "Split"). set_titles("Works fine")
  
если ваш график не является таким, FacetGrid и вы используете set_titles , заголовок отображаться не будет

Например

не будет работать

 plt.figure(figsize=(20,6))  
sns.displot(df["GPA"],kind='kde').set_titles("Distribution of Data")
  

Работает нормально

 plt.figure(figsize=(20,6)) # works fine
sns.displot(df["GPA"],kind='kde').set(title='Title of Plot')
  

https://seaborn.pydata.org/generated/seaborn .FacetGrid.set_titles.html

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

1. Ваш первый пример — set_title , но вопрос о set_titles (с «s»), который отличается. Как сказал мваском, set_titles (с «s») возможно только в том случае, если вы обработали параметры col или row .

2. @tdy спасибо, tdy это была опечатка, вы думаете, что мой ответ — это просто репутация, и мне нужно ее удалить или я должен ее сохранить,

3. Но теперь ваш отредактированный код не работает. set_titles не работает на обычном (не ограненном) графике без col или row . Это именно то, о чем спрашивал Мундра.

4. @tdy я вижу, что удалю свой ответ

5. @tdy мое предложение заключается в том, что он может использовать set(title='Title of Plot') , чтобы быть конкретным