如何在不创建摘要数据框的情况下在ggplot2中标记堆积条形图?

时间:2011-09-09 16:03:10

标签: r label ggplot2 bar-chart

以下代码提供了精彩的堆积条形图

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个标签,而我只想给出4个负数或者8个(如果一个包含正数百分比的标签)。

我真的必须制作我的syrclia的聚合数据框并绘制出来吗?

1 个答案:

答案 0 :(得分:7)

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,"%")))

HTH enter image description here