在ggplot2中为每个分面添加观测数量的注释

37

可能是重复问题:
使用ggplot2创建facet_wrap图表,每个图表中的注释不同
在具有日期X轴的ggplot2看板图中添加文本

有时,在 ggplot 中分面数据时,我认为注释每个分面中落入每个分面的观测数量会很好。这特别重要,当分面可能导致每个分面相对较少的观察时。

如何在此图的每个分面上添加 "n = X" 是最佳/最简单的方法?

require(ggplot2)
mms <- data.frame(deliciousness = rnorm(100),
                  type=sample(as.factor(c("peanut", "regular")), 100, replace=TRUE),
                  color=sample(as.factor(c("red", "green", "yellow", "brown")), 100, replace=TRUE))


plot <- ggplot(data=mms, aes(x=deliciousness)) + geom_density() + facet_grid(type ~ color)

https://dev59.com/cnI-5IYBdhLWcg3wBjhR - Andy
https://dev59.com/NGgu5IYBdhLWcg3wQE8D - Geek On Acid
点赞了,因为包括了图片和可重现的数据(参见“创建一个facet_wrap…”) - flies
1个回答

51

看起来这个问题以前已经被问过了,而我最初没有看出它们的联系。我在这里回答,但不接受,以防有人有更优雅的解决方案。此外,n = foo 是一个足够常见的情况,希望即使这个问题有点重复,某些人仍然能从中受益。

require(ggplot2)
require(plyr)
mms <- data.frame(deliciousness = rnorm(100),
                  type=sample(as.factor(c("peanut", "regular")), 
                              100, replace=TRUE),
                  color=sample(as.factor(c("red", "green", "yellow", "brown")), 
                              100, replace=TRUE))


mms.cor <- ddply(.data=mms, 
                 .(type, color), 
                 summarize, 
                 n=paste("n =", length(deliciousness)))

plot <- ggplot(data=mms, aes(x=deliciousness)) + 
          geom_density() + 
          facet_grid(type ~ color) + 
          geom_text(data=mms.cor, aes(x=1.8, y=5, label=n), 
                    colour="black", inherit.aes=FALSE, parse=FALSE)

plot

输出


2
谢谢 - 这提供了一个我在其他地方没有找到的答案。 - Ed G
4
尽管在技术上是一个副本,但这个例子具有更简单的优点,并且直接针对解决方案的核心。在我看来,提问者的标题也更清晰。 - jjap
有一个更简单的解决方案 - 避免定义 mms.cor。在 geom_text 中,将数据定义为 data = plyr::count(mms, vars = c("deliciousness"))。但需要注意的是,我只测试了一个变量的分面,而不是两个。 - spops
1
谢谢,确实是有帮助的问答!受@spops评论的启发,我找到了一个解决方案,可以在这个数据框上工作,将两个变量分面,而不需要使用mms.corgeom_text(data=plyr::count(mms, vars = c("type","color")), aes(x=1.8, y=5, label=paste0("N=",freq)), colour="black", inherit.aes=FALSE, parse=FALSE) - bug313

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接