Изменение порядка столбчатой ​​диаграммы с накоплением процентов по полу и значениям - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь изменить порядок своих значений по полу, от самых высоких женщин к самым низким женщинам.

enter image description here

Первые значения этого набора данных:

sex,values,citizen_full
F,543,Aghanistan 
M,376,Afghanistan
F,131,Albania
M,141,Albania
F,134,Argentina
M,107,Argentina
F,325,Austria
M,231,Austria
ggplot(dataframe, aes(x = factor(citizen_full), y = values, fill = sex)) +
  geom_bar(position = 'fill', stat = 'identity') +
  theme_minimal()

1 Ответ

2 голосов
/ 28 мая 2020

Вы можете использовать функцию fct_reorder:

df <- tibble::tribble(
  ~sex, ~values, ~citizen_full,
   "F",    543L,  "Aghanistan",
   "M",    376L, "Afghanistan",
   "F",    131L,     "Albania",
   "M",    141L,     "Albania",
   "F",    134L,   "Argentina",
   "M",    107L,   "Argentina",
   "F",    325L,     "Austria",
   "M",    231L,     "Austria"
  )

library(dplyr)
library(ggplot2)
library(forcats)
df %>% 
  group_by(citizen_full, sex) %>% 
  mutate(sum_sex_grouped = sum(values)) %>% 
  group_by(citizen_full) %>% 
  mutate(sum_citizien = sum(values),
         sex_percent = sum_sex_grouped/sum_citizien,
         percent_women = if_else(sex == "F", sex_percent, 0)) %>% 
ggplot(aes(x = fct_reorder(citizen_full, desc(percent_women)), y = values, fill = sex)) +
  geom_bar(position = 'fill', stat = 'identity') +
  theme_minimal()

enter image description here

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