Как пометить столбчатую диаграмму с накоплением в ggplot2 без создания сводного фрейма данных? - PullRequest
3 голосов
/ 09 сентября 2011

Следующий код предоставляет замечательную гистограмму с накоплением

cls.grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d"))
ser <- sample(x=c("neg","pos"),size=80,replace=TRUE, prob=c(30,70))
syrclia <- data.frame(cls.grp,ser)
ggplot(syrclia, aes(cls.grp, fill=ser))+ geom_bar()

Я ожидал, что с помощью geom_text или stat_summary я смогу пометить процент, который был отрицательным в каждой группе, и поместить его на соответствующий столбец. Я перепробовал много перестановок и не могу заставить его работать. Я даже пытался вручную вводить проценты и заставлять метки, где я хочу их, но это не работает. Он ожидает 80 меток, и я хочу дать только четыре, которые являются отрицательными или, возможно, 8 (если один включает метки для процента, которые являются положительными).

Действительно ли мне нужно составить совокупную базу данных моей syrclia и построить ее?

1 Ответ

7 голосов
/ 09 сентября 2011

geom_bar использует stat_bin по умолчанию. Таким образом, вы должны использовать stat_bin для построения чисел, указать ему использовать geom_text и использовать только что созданный ..count.. в качестве метки.

    cls.grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d"))
    ser <- sample(x=c("neg","pos"),size=80,replace=TRUE, prob=c(30,70))
    syrclia <- data.frame(cls.grp,ser)
    library(ggplot2)
    total <- ddply(syrclia, .(cls.grp), function(x) nrow(x))[, 2]
    ggplot(syrclia, aes(cls.grp, fill=ser))+ geom_bar() + 
      stat_bin(geom = "text", 
               aes(label = paste(
                   ..count../get("total", envir = .GlobalEnv)*100,"%")))

НТН enter image description here

...