r - 在密度图顶部添加文本标签以标记不同的组
问题描述
我有以下 ggplot 密度图
ggplot(mpg, aes(cty)) + geom_density(aes(fill=factor(cyl)))
如何删除图例,并在每个分布上方添加标签以表示它所属的组?
解决方案
就像@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)
推荐阅读
- android - 模拟器预览中显示但设备中不显示的文本
- mysql - 将 MYSQL 行值转换为列名
- encryption - 查询包含使用 Jasypt 加密的列的表时,GORM 不返回数据。(圣杯)
- scala - 如何断言验证scala中案例类字段的访问权限?
- javascript - 单击时如何从选择菜单中灰显特定选项?
- charts - 如何在悬停 Google 地理图表上替换或删除国家笔划颜色?
- import - Google 日历未显示来自 S3 上托管的 iCalendar (ics) 文件的事件
- java - 用户按下图像按钮打开 URL 而不出现新窗口
- c++ - 基类和派生类关系的正确使用方法吗?
- laravel - 如何根据选择的下拉菜单显示特定类别