在ggplot2中使用facet_grid和annotate

时间:2016-05-08 01:03:20

标签: r plot ggplot2

假设我有数据框d(下面有dput)。我想用TaskEvent填充的填充条绘制它,并使用组成每个条形的值的数量进行注释。

ggplot(inter2, aes(Aud, fill = value)) + 
    geom_bar(position = 'fill') + 
    facet_grid(Task~Event) + 
    annotate('text', label = as.character(table(inter2$Aud)), x = 1:nlevels(inter2$Aud), y = 1)

问题是我无法弄清楚如何在label内安排annotate()向量。

如果我只使用facet_grid()那么我得到了分面:

ggplot(inter2, aes(Aud, fill = value)) + 
    geom_bar(position = 'fill') + 
    facet_grid(Task~Event)

grid

如果我只使用annotate(),那么我会得到数字:

ggplot(inter2, aes(Aud, fill = value)) + 
    geom_bar(position = 'fill') + 
    annotate('text', label = as.character(table(inter2$Aud)), x = 1:nlevels(inter2$Aud), y = 1)

numbers

但我无法弄清楚如何设置label的{​​{1}}参数与annotate()一起使用。有什么帮助吗?

facet_grid

1 个答案:

答案 0 :(得分:3)

您必须预先处理数据以使用facetting变量生成geom_text图层,

 library(plyr)
 d2 <- ddply(d, .(Task, Event), function(.d) data.frame(table(.d$Aud, dnn=list("Aud"))))

 ggplot(d, aes(Aud, fill = value)) + 
   geom_bar(position = 'fill') + 
   facet_grid(Task~Event) +
   geom_text(data=d2, aes(Aud, y=1, label=Freq), 
             vjust=1, fontface=4, col="white", inherit.aes=FALSE) +
   theme(axis.text.x=element_text(angle = 90, hjust=1, vjust=0.5))

enter image description here