У меня есть

p %>% 
  as_tibble() %>% 
  mutate(nystudie=as.character(studie),
         n.seven=as.factor(n.seven)) %>% 
  bind_rows(., mutate(., nystudie="all")) %>% 
  count(nystudie, n.seven) %>%
  ggplot(aes(nystudie, n, color = n.seven, fill= n.seven, label=n))  +
  geom_col(position = position_dodge2(preserve = "single", padding = 0.1))+
  geom_text(aes(label=n),position = position_dodge2(0.9), vjust=-0.25, fontface=2, cex=4.5, show.legend = F)

Уступая

enter image description here

Но мои данные включают шесть (0-5), а не пять (0-4) подгрупп.

> table(p$studie,p$n.seven)
   
     0  1  2  3  4  5
  A 39 30  5 28  8  0
  B 44 29  5 29  4  0

Ожидаемый результат - черная линия (или аналогичная), соответствующая группе с 0 значениями и с 0, написанным выше. Что-то вроде этого:

enter image description here

Кроме того, p$n.seven==5 также должен появиться в легенде.

p <- structure(list(studie = c("B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B"), n.seven = structure(c(4L, 4L, 
4L, 4L, 2L, 1L, 4L, 1L, 4L, 2L, 4L, 2L, 4L, 1L, 4L, 5L, 2L, 1L, 
1L, 5L, 1L, 1L, 2L, 2L, 1L, 4L, 3L, 4L, 2L, 1L, 5L, 2L, 2L, 2L, 
2L, 2L, 1L, 2L, 3L, 2L, 1L, 4L, 2L, 1L, 4L, 1L, 4L, 1L, 2L, 2L, 
2L, 4L, 1L, 4L, 2L, 4L, 1L, 1L, 1L, 4L, 1L, 2L, 1L, 1L, 1L, 2L, 
2L, 1L, 1L, 2L, 4L, 1L, 1L, 4L, 2L, 2L, 2L, 1L, 1L, 3L, 2L, 5L, 
1L, 1L, 1L, 4L, 4L, 4L, 5L, 1L, 4L, 4L, 1L, 4L, 2L, 1L, 1L, 2L, 
2L, 4L, 4L, 5L, 5L, 1L, 1L, 2L, 1L, 4L, 1L, 1L, 5L, 5L, 1L, 4L, 
4L, 2L, 3L, 1L, 1L, 1L, 1L, 4L, 1L, 1L, 4L, 4L, 4L, 2L, 4L, 4L, 
2L, 1L, 1L, 2L, 4L, 1L, 3L, 1L, 4L, 1L, 2L, 3L, 1L, 5L, 1L, 4L, 
4L, 1L, 4L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 4L, 4L, 2L, 4L, 1L, 3L, 
1L, 4L, 4L, 5L, 1L, 1L, 3L, 1L, 2L, 2L, 1L, 4L, 4L, 4L, 4L, 4L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 
4L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 4L, 2L, 
1L, 2L, 1L, 4L, 1L, 5L, 2L, 3L, 4L, 3L, 4L), .Label = c("0", 
"1", "2", "3", "4", "5"), class = "factor")), row.names = c(NA, 
-221L), class = c("tbl_df", "tbl", "data.frame"))
0
cmirian 15 Сен 2020 в 16:58

1 ответ

Лучший ответ

Попробуй это. Вы можете сделать хитрый трюк, добавив новые данные с помощью bind_rows() в ваш конвейер. Вот код:

library(tidyverse)
#Code
p %>% 
  as_tibble() %>% 
  mutate(nystudie=as.character(studie),
         n.seven=as.character(n.seven)) %>% 
  bind_rows(., mutate(., nystudie="all")) %>% 
  count(nystudie, n.seven) %>%
  bind_rows(data.frame(nystudie=c('A','all','B'),
                       n.seven=as.character(rep(5,3)),
                       n=0,stringsAsFactors = F)) %>%
  ggplot(aes(nystudie, n, color = n.seven, fill= n.seven, label=n))  +
  geom_col(position = position_dodge2(preserve = "single", padding = 0.1))+
  geom_text(aes(label=n),position = position_dodge2(0.9), vjust=-0.25, fontface=2, cex=4.5, show.legend = F)

Выход:

enter image description here

Или лучше воспользоваться практическими советами замечательного @Stefan (спасибо ему за такой совет в count()):

#Code
p %>% 
  as_tibble() %>% 
  mutate(nystudie=as.character(studie),
         n.seven=as.factor(n.seven)) %>% 
  bind_rows(., mutate(., nystudie="all")) %>% 
  count(nystudie, n.seven,.drop = F) %>%
  ggplot(aes(nystudie, n, color = n.seven, fill= n.seven, label=n))  +
  geom_col(position = position_dodge2(preserve = "single", padding = 0.1))+
  geom_text(aes(label=n),position = position_dodge2(0.9), vjust=-0.25, fontface=2, cex=4.5, show.legend = F)

Выход:

enter image description here

2
Duck 15 Сен 2020 в 14:07