Как поместить сетку фасетов Seaborn в сетку plt.subplots и изменить заголовок или xlabel

#python #matplotlib #plot #seaborn

#python #matplotlib #график #seaborn

Вопрос:

Я пытаюсь создать distplot / kdeplot с оттенком в качестве цели для нескольких столбцов в моем наборе данных. Я делаю это, используя kdeplot с сеткой facetgrid и используя параметр ax, чтобы он отображался на моих рисунках plt.subplot. Однако я не могу изменить заголовок на отдельном графике. Я пробовал g.fig.suptitle и ax[0,0].set_title, но ни один из них не работает

 df = sns.load_dataset('titanic')
fig, ax =  plt.subplots(2,2,figsize=(10,5))
g = sns.FacetGrid(df, hue="survived")
g = g.map(sns.kdeplot, "age",ax=ax[0,0])
g.fig.suptitle('age')
h = g.map(sns.kdeplot, "fare",ax=ax[0,1])
h.fig.suptitle('fare')
ax[0,0].set_title ='age'
ax[1,0].set_xlabel='fare'
  

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

Кстати, мне не нужно использовать Seaborn, matplotlib тоже подойдет

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

1. Какие переменные вы хотите отобразить на каждом подзаголовке?

Ответ №1:

Если вам нужны два графика плотности для age и fare , вы можете попробовать повернуть его в длину, а затем применить сетку FacetGrid:

 import seaborn as sns
df = sns.load_dataset('titanic')
  

Итак, длинный формат выглядит так, он позволяет разделить variable столбец:

 df[['survived','age','fare']].melt(id_vars='survived')

    survived    variable    value
0   0   age 22.00
1   1   age 38.00
2   1   age 26.00
3   1   age 35.00
4   0   age 35.00
  

И мы строим:

 g = sns.FacetGrid(df[['survived','age','fare']].melt(id_vars='survived'),
                  col="variable",sharex=False,sharey=False,hue="survived")
g.map(sns.kdeplot,"value")
  

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

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

1. Спасибо, я действительно наткнулся на этот ответ в другом сообщении SO, но, похоже, это лучший вариант