如何仅用geom_point在ggplot2直方图的每个条形顶部添加点?
在ggplot2直方图条形顶部添加geom_point的解决方法
要在直方图每个条形顶部添加点,核心是让geom_point使用和geom_histogram一致的分箱统计逻辑——默认情况下geom_point不会对数据做分箱处理,这就是你之前出现统计映射错误的原因。
具体实现要点
- 给
geom_point指定stat = "bin",和直方图的统计变换保持统一 - 统一设置分箱参数(如
bins或binwidth),确保点的位置和条形位置完全匹配 - 通过
after_stat()获取分箱后的条形中点(x)和对应高度值(密度density或计数count)
示例代码
基于密度映射的完整实现
library(ggplot2) ggplot(mtcars, aes(x = mpg)) + # 基础密度映射直方图 geom_histogram( aes(y = after_stat(density)), bins = 10, fill = "lightblue", alpha = 0.5 ) + # 密度映射频率多边形 geom_freqpoly( aes(y = after_stat(density)), bins = 10, color = "red", linewidth = 1 ) + # 条形顶部的点 geom_point( stat = "bin", aes(x = after_stat(x), y = after_stat(density)), bins = 10, color = "darkgreen", size = 3 )
基于计数映射的版本
如果不需要密度,直接用条形的计数作为高度,只需修改y的映射:
ggplot(mtcars, aes(x = mpg)) + geom_histogram( aes(y = after_stat(count)), bins = 10, fill = "lightblue", alpha = 0.5 ) + geom_point( stat = "bin", aes(x = after_stat(x), y = after_stat(count)), bins = 10, color = "darkgreen", size = 3 )
关键注意事项
必须保证geom_histogram和geom_point的分箱参数(bins/binwidth)完全一致,否则点的位置会和条形错位。
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

