我该如何使用stat_summary
标记一个图n = x
哪里x
一个变量?这是所需输出的示例:
我可以用这个相当低效的代码来制作上面的图:
nlabels <- sapply(1:length(unique(mtcars$cyl)), function(i) as.vector(t(as.data.frame(table(mtcars$cyl))[,2][[i]])))
ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) +
geom_boxplot(fill = "grey80", colour = "#3366FF") +
geom_text(aes(x = 1, y = median(mtcars$mpg[mtcars$cyl==sort(unique(mtcars$cyl))[1]]), label = paste0("n = ",nlabels[[1]]) )) +
geom_text(aes(x = 2, y = median(mtcars$mpg[mtcars$cyl==sort(unique(mtcars$cyl))[2]]), label = paste0("n = ",nlabels[[2]]) )) +
geom_text(aes(x = 3, y = median(mtcars$mpg[mtcars$cyl==sort(unique(mtcars$cyl))[3]]), label = paste0("n = ",nlabels[[3]]) ))
这是这个问题的后续:如何在 ggplot2 箱线图中添加每组的观察数量并使用组平均值?我可以在哪里使用stat_summary
计算并显示观察次数,但我一直无法找到一种方法来包含n =
in the stat_summary
输出。似乎stat_summary
可能是进行此类标记的最有效方法,但也欢迎其他方法。
您可以创建自己的函数以在内部使用stat_summary()
. Here n_fun
将 y 值的位置计算为median()
然后添加label=
包括n=
和观察次数。使用很重要data.frame()
代替c()
因为paste0()
会产生性格但是y
值是数字,但是c()
会使两个角色。然后在stat_summary()
使用此功能并geom="text"
。这将确保每个 x 值位置和标签仅根据该级别的数据制作。
n_fun <- function(x){
return(data.frame(y = median(x), label = paste0("n = ",length(x))))
}
ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) +
geom_boxplot(fill = "grey80", colour = "#3366FF") +
stat_summary(fun.data = n_fun, geom = "text")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)