Добавление процентных меток внутри групп для гистограммы ggplot до публикации - PullRequest
1 голос
/ 05 января 2020

Я новичок в R, и у меня возникли проблемы с добавлением процентных меток к столбчатой ​​диаграмме до публикации. Данные похожи на это:

pre<-c("yes", "no", "no", "maybe", "yes", "yes", "no", "yes", "yes", "yes")
post<-c("no", "no", "maybe", "yes", "no", "no", "no", "yes", "no", "maybe")
dat<-as.data.frame(cbind(pre,post)

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

dat %>%
  gather(key,value) %>%
  mutate(value_ordered=factor(value, levels=c("no", "maybe","yes"))) %>%
  ggplot(aes(x=value_ordered,fill=key)) +
  geom_bar(aes(y=(..count../sum(..count..))), position = "dodge") +
  scale_y_continuous(label=percent) +
  xlab("Pre/post") + ylab("") +
  theme(axis.text.x=element_text(angle=60, hjust=1), legend.title=element_blank()) 

, который производит этот сюжет: [pre / post plot] [1] извинения, я новичок на сайте, и он пока не позволит мне опубликовать изображение.

То, что я надеюсь сделать, это добавить текст в процентах внутри группы над каждым столбцом для сравнения, чтобы все столбцы «pre» добавляли до 100%, а все столбцы «post» - до 100 %, но большая часть того, что я нахожу, содержит процентное содержание текста над каждой полосой для всего набора данных, а не внутри каждой группы. Я надеюсь это имеет смысл. Спасибо за понимание или помощь.

1 Ответ

0 голосов
/ 05 января 2020

Один из способов сделать это - создать столбец за пределами ggplot, который будет предоставлять совокупную сумму каждой переменной. Таким образом, в дополнение к создаваемому вами столбцу value_ordered вы можете добавить новые столбцы для счетчика и совокупного счета следующим образом:

library(tidyr)
library(dplyr)

d <- dat %>% pivot_longer(everything(), names_to = "Names", values_to = "Values") %>%
  mutate(value_ordered=factor(Values, levels=c("no", "maybe","yes")))%>%
  group_by(Names, value_ordered) %>% summarise(Count = n()) %>%
  mutate(Percent = Count / sum(Count)*100)  

# A tibble: 6 x 4
# Groups:   Names [2]
  Names value_ordered Count Percent
  <chr> <fct>         <int>   <dbl>
1 post  no                6      60
2 post  maybe             2      20
3 post  yes               2      20
4 pre   no                3      30
5 pre   maybe             1      10
6 pre   yes               6      60

Теперь вы можете использовать этот столбец CumPer в качестве метки для каждого столбца вашей гистограммы в следующем коде:

library(ggplot2)
library(scales)

ggplot(d, aes( x= value_ordered, y = Percent/100, fill = Names, label = paste(Percent,"%")))+
  geom_bar(stat = "identity", position = position_dodge())+
  geom_text(position = position_dodge(.9), vjust = -0.5)+
  scale_y_continuous(labels = percent) + 
  xlab("Pre/post") + ylab("") +
  theme(axis.text.x=element_text(angle=60, hjust=1), legend.title=element_blank()) 

enter image description here Выглядит ли то, что вы ожидаете?

...