首页 > 解决方案 > 在密度图顶部添加文本标签以标记不同的组

问题描述

我有以下 ggplot 密度图

ggplot(mpg, aes(cty)) + geom_density(aes(fill=factor(cyl)))

如何删除图例,并在每个分布上方添加标签以表示它所属的组?

标签: rggplot2geom-text

解决方案


就像@DavidKlotz在评论中所说的那样,必须预先计算cty每组的密度最大值。cyl我会用 Hadley Wickham 的split/lapply/combine 策略来做到这一点。

sp <- split(mpg$cty, mpg$cyl)
a <- lapply(seq_along(sp), function(i){
  d <- density(sp[[i]])
  k <- which.max(d$y)
  data.frame(cyl = names(sp)[i], xmax = d$x[k], ymax = d$y[k])
})
a <- do.call(rbind, a)

现在剧情。

ggplot(mpg, aes(cty)) + 
  geom_density(aes(fill = factor(cyl)), alpha = 0.5) +
  geom_text(data = a, 
            aes(x = xmax, y = ymax, 
                label = cyl, vjust = -0.5)) +
  scale_fill_discrete(guide = FALSE)

在此处输入图像描述


推荐阅读