Морские многократные ограждения

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

    class       men       woman   children
0   first   0.91468    0.667971   0.660562
1   second  0.30012    0.329380   0.882608
2   third   0.11899    0.189747   0.121259

Как бы я создал сюжет, используя морского волка, который выглядит следующим образом? Должен ли я каким-то образом изменить свои данные?


(источник: mwaskom на stanford.edu)

Ответ 1

Да, вам нужно изменить форму DataFrame:

df = pd.melt(df, id_vars="class", var_name="sex", value_name="survival rate")
df
Out: 
    class       sex  survival rate
0   first       men       0.914680
1  second       men       0.300120
2   third       men       0.118990
3   first     woman       0.667971
4  second     woman       0.329380
5   third     woman       0.189747
6   first  children       0.660562
7  second  children       0.882608
8   third  children       0.121259

Теперь вы можете использовать factorplot (v0.8.1 или более раннюю):

sns.factorplot(x='class', y='survival rate', hue='sex', data=df, kind='bar')

enter image description here

Для версий 0.9.0 или новее, как заметил Мэтью в комментариях, вам нужно использовать переименованную версию, catplot.

sns.catplot(x='class', y='survival rate', hue='sex', data=df, kind='bar')

Ответ 2

Я знаю, что мой ответ пришел очень поздно, но я надеюсь, что кто-то выиграет от этого.

Чтобы решить вышесказанное, я использовал приведенный ниже код после перегруппировки данных, конечно:

Данные:

d = {'class': ['first', 'second', 'third', 'first', 'second', 'third', 'first', 'second', 'third'], 'sex': ['men', 'men', 'men', 'woman', 'woman', 'woman', 'children', 'children', 'children'], 'survival_rate':[0.914680, 0.300120, 0.118990, 0.667971, 0.329380, 0.189747, 0.660562, 0.882608, 0.121259]} 

df = pd.DataFrame(data=d)

enter image description here

sns.factorplot("sex", "survival_rate", col="class", data=df, kind="bar")

enter image description here