составной барплот с общим и отредактированным пределом оси - python - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь создать составной барплот, но с seaborn все выглядит довольно сложно. У меня есть эти данные:

x = pd.DataFrame({"Groups" : np.random.choice(["Group1", "Group2", "Group3"], 100),
                 "Sex" : np.random.choice(["Masculine", "Femenine"], 100)})
x = x.groupby(["Groups", "Sex"]).size().reset_index(name="count")
x["percent (%)"] = round(x.groupby("Groups").transform(lambda x: x/sum(x))*100,1)
x

enter image description here

И у меня есть этот участок:

sns.barplot(x="Groups", y="percent (%)", hue="Sex", data=x);

enter image description here

Тем не менее, я смотрю, что в каждой группе есть столбец с накоплением, ось Y от 0 до 1 и «group4» с итогом. Когда я пытаюсь построить границы вроде здесь , это дает мне ошибку, так как этот график морских линий не позволяет этого, и у каждого столбца с накоплением, найденного мной, есть столбцы для каждой группы со значениями каждого группа в соответствующем столбце, и у меня есть все группы в одном столбце. Любые идеи?

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

1 Ответ

3 голосов
/ 05 марта 2020

Не уверен, как будет выглядеть group4, вот гистограмма с накоплением:

x = pd.DataFrame({"Groups" : np.random.choice(["Group1", "Group2", "Group3"], 100),
                 "Sex" : np.random.choice(["Masculine", "Femenine"], 100)})

xf = x.groupby(["Groups"])['Sex'].value_counts().unstack('Groups')
xf['Total'] = xf.sum(1)
xf.div(xf.sum()).T.plot.bar(stacked=True)

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...