Морские многократные ограждения
У меня есть датафрейм для панд, который выглядит следующим образом:
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]()