ggplot добавляет сводные сводки к гистограмме - PullRequest
0 голосов
/ 15 октября 2018

У меня есть следующий фрейм данных:

structure(list(StepsGroup = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L), .Label = c("(-Inf,3e+03]", "(3e+03,1.2e+04]", "(1.2e+04, Inf]"
), class = "factor"), GlucoseGroup = structure(c(1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L), .Label = c("<100", "100-180", ">180"
), class = "factor"), n = c(396L, 1600L, 229L, 787L, 4182L, 375L, 
110L, 534L, 55L), freq = c(0.177977528089888, 0.719101123595506, 
0.102921348314607, 0.147267964071856, 0.782559880239521, 0.0701721556886228, 
0.157367668097282, 0.763948497854077, 0.0786838340486409)), class = 
c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -9L), vars = "StepsGroup", 
labels = structure(list(
StepsGroup = structure(1:3, .Label = c("(-Inf,3e+03]", "(3e+03,1.2e+04]", 
"(1.2e+04, Inf]"), class = "factor")), class = "data.frame", row.names = 
c(NA, -3L), vars = "StepsGroup", drop = TRUE), indices = list(0:2, 
3:5, 6:8), drop = TRUE, group_sizes = c(3L, 3L, 3L), biggest_group_size = 
3L)

Я хотел бы создать столбчатую диаграмму с накоплением и добавить сводку по каждому StepsGroup в верхней части каждого столбца.Таким образом, первая группа будет иметь 2225, вторая 5344 и третья 699.

Я использую следующий скрипт:

ggplot(d_stepsFastingSummary , aes(y = freq, x = StepsGroup, fill = 
GlucoseGroup)) + geom_bar(stat = "identity") +
 geom_text(aes(label = sum(n()), vjust = 0))

Часть до того, как geom_text работает, но дляпоследний бит я получаю следующую ошибку:

Error: This function should not be called directly

Есть идеи, как добавить агрегированное количество?

1 Ответ

0 голосов
/ 15 октября 2018

Мы могли бы создать новый фрейм данных stacked_df, который бы имел sum для каждого StepsGroup

stacked_df <- df %>% group_by(StepsGroup) %>% summarise(nsum = sum(n))


ggplot(df) + 
   geom_bar(aes(y = freq, x = StepsGroup, fill= GlucoseGroup),stat = "identity") +
   geom_text(data = stacked_df, aes(label = nsum, StepsGroup,y = 1.1))

enter image description here

...