ggplot2密度图添加annotate标注后消失的问题求助
问题:ggplot2添加annotate文本标注后密度图消失
我在项目中使用ggplot2绘制多张密度图。未添加标注时,以下代码可正常生成带分位数竖线的密度图:
d2 <- pt_diff %>% summarize(lower = quantile(spread, probs = 0.40), upper = quantile(spread, probs = 0.60)) p <- ggplot(pt_diff, aes(x = spread)) + geom_density(aes(fill = 'red')) + geom_vline(data = d2, aes(xintercept = lower)) + geom_vline(data = d2, aes(xintercept = upper)) + ggtitle(paste0(current_week$home.team.name[k],' vs. ', current_week$away.team.name[k]))
但为分位数竖线添加annotate文本标注后,密度图消失,添加标注后的代码如下:
p <- ggplot(pt_diff, aes(x = spread)) + geom_density(aes(fill = 'red')) + geom_vline(data = d2, aes(xintercept = lower)) + annotate('text', label = round(d2$lower, 2), x = -30, y = 100) + geom_vline(data = d2, aes(xintercept = upper)) + annotate('text', label = round(d2$upper,2), x = 4.5, y = 200) + ggtitle(paste0(current_week$home.team.name[k],' vs. ', current_week$away.team.name[k]))
请问导致该问题的原因是什么?
原因分析与解决办法
核心原因:你在annotate里设置的y值(100、200)远大于密度图的实际y轴范围。密度图的y轴代表概率密度值,这类数值通常远小于1(比如0.01到0.1之间)。当你把文本标注的y坐标设到100、200时,ggplot会自动扩展y轴范围以容纳这个标注,导致原本的密度曲线被压缩到几乎看不见的地步,看起来就像“消失”了。
解决办法
- 调整
annotate的y值到密度图实际的y轴范围内:先查看未添加标注时的密度图y轴最大值,把y设成比这个值略高一点的数值(比如y=0.05,具体数值根据你的数据调整)。 - 改用
geom_text结合分位数数据框d2来标注,这样可以更灵活地匹配密度图的y轴范围,示例代码:
p <- ggplot(pt_diff, aes(x = spread)) + geom_density(aes(fill = 'red')) + geom_vline(data = d2, aes(xintercept = lower)) + geom_text(data = d2, aes(x = lower, y = 0.03, label = round(lower, 2))) + geom_vline(data = d2, aes(xintercept = upper)) + geom_text(data = d2, aes(x = upper, y = 0.03, label = round(upper,2))) + ggtitle(paste0(current_week$home.team.name[k],' vs. ', current_week$away.team.name[k]))
这里的y=0.03可以根据你实际的密度曲线高度调整。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

