【发布时间】:2017-08-29 16:17:28
【问题描述】:
我正在尝试生成标有样本大小的(分组)密度图。
样本数据:
set.seed(100)
df <- data.frame(ab.class = c(rep("A", 200), rep("B", 200)),
val = c(rnorm(200, 0, 1), rnorm(200, 1, 1)))
生成未标记的密度图,如下所示:
ggplot(df, aes(x = val, group = ab.class)) +
geom_density(aes(fill = ab.class), alpha = 0.4)
我想要做的是在每个密度峰值附近的某处添加文本标签,显示每组中的样本数。但是,我找不到以这种方式汇总数据的正确选项组合。
我尝试将此答案中建议的代码改编为箱线图上的类似问题:https://stackoverflow.com/a/15720769/1836013
n_fun <- function(x){
return(data.frame(y = max(x), label = paste0("n = ",length(x))))
}
ggplot(df, aes(x = val, group = ab.class)) +
geom_density(aes(fill = ab.class), alpha = 0.4) +
stat_summary(geom = "text", fun.data = n_fun)
但是,Error: stat_summary requires the following missing aesthetics: y 失败。
我还尝试在geom_density() 和stat_summary() 层的每个aes() 中添加y = ..density..,并在ggplot() 对象本身中添加...这些都没有解决问题。
我知道这可以通过为每个组手动添加标签来实现,但我希望有一个通用的解决方案,例如允许通过aes() 设置标签颜色以匹配密度。
我哪里错了?
【问题讨论】: