Деление процентов на группы, но цвет по другой переменной

#r #ggplot2 #bar-chart #facet

Вопрос:

Я пытаюсь построить гистограмму в R, используя ggplot. Предполагается, что график представляет проценты разной длины, и каждая грань представляет категориальную переменную. Есть третья переменная, с помощью которой я хочу раскрасить полосы. Вот имитация того, что я делаю:

 lengths lt;- sample(x = c(12, 15, 20, 25, 30, 32, 35, 40, 45, 60), size = 1000, replace = TRUE) group lt;- sample(c("A", "B", "C", "D"), size = 1000, replace = TRUE) sex lt;- sample(c("Female", "Male"), size = 1000, replace = TRUE)  data lt;- data.frame(lengths = lengths, sex = sex, group = group) rm(lengths, group, sex)  ggplot(data = data %gt;%   bind_rows(data %gt;%   mutate(group = "Total")), aes(x = lengths, group = group, fill = sex))     geom_bar(aes(y = ..prop..), color = "black", stat = "count")    labs(y = "%", fill = "sex")    facet_wrap(~ group, nrow = 6, strip.position = "right", scales = "free")    scale_x_continuous(limits = c(20,80))    scale_y_continuous(labels = scales::percent)    theme(legend.position = c(.75, .95), legend.background = element_rect(fill = "white", color = "black"), axis.line = element_line(color = "black"), panel.background = element_blank(), legend.direction = "horizontal", strip.background = element_blank(), strip.text.y = element_blank())    scale_color_discrete(guide = "none")    scale_fill_manual(values = c("purple", "blue", "gray"))  

Но результат-это не то, что я ищу, так как все полоски окрашены в серый цвет, а не заполнены сексом:

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

Это код, который я использовал для расчета пропорции в отношении количества в каждой группе (не пола). Если я не учитываю групповой аргумент, шкалы кажутся неправильными.

Поэтому, по сути, я все еще хочу показать пропорцию по отношению к каждой отдельной группе, но заполнить столбцы другой категориальной переменной.

Есть идеи, как это решить?

Спасибо

Ответ №1:

Просто удалите группу=группа:

 `ggplot(data = data %gt;%   bind_rows(data %gt;%   mutate(group = "Total")), aes(x = lengths, fill = sex))     geom_bar(aes(y = ..prop..), color = "black", stat = "count")    labs(y = "%", fill = "sex")    facet_wrap(~ group, nrow = 6, strip.position = "right", scales = "free")    scale_x_continuous(limits = c(20,80))    scale_y_continuous(labels = scales::percent)    theme(legend.position = c(.75, .95), legend.background = element_rect(fill = "white", color = "black"), axis.line = element_line(color = "black"), panel.background = element_blank(), legend.direction = "horizontal", strip.background = element_blank(), strip.text.y = element_blank())    scale_color_discrete(guide = "none")    scale_fill_manual(values = c("purple", "blue", "gray"))`  

Мне потребовалось довольно много времени, чтобы понять это.

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

1. Нет, при этом проценты не рассчитываются в привязке к группе. Если вы примените это изменение к примеру, вы увидите, как ось y изменится на другой процент.

2. Я не думаю, что удаление » scales = ‘free’ » из вызова facet_wrap допустимо?

3. Это не решает проблему

4. К сожалению, это за пределами моих знаний, но я думаю, что ответ должен включать преобразование данных перед вызовом ggplot, поскольку кажется очевидным, что group и fill несовместимы, поскольку вы их настроили.