向ggridges图形添加geom_point报错:ecdf对象未找到
解决ggridges添加点估计时的
object 'ecdf' not found报错 我来帮你搞定这个问题!你遇到的报错核心原因是:全局ggplot()的aes里定义了依赖stat_density_ridges计算的..ecdf..变量,而geom_point会默认继承这个全局映射,但它本身并不会生成..ecdf..这个对象,所以就抛出了找不到变量的错误。
咱们调整代码结构就能轻松解决,修正后的代码如下:
library(ggplot2) library(ggridges) library(dplyr) # 别忘了加载dplyr,因为用到了分组汇总函数 # 计算每个物种的Sepal.Length中位数 iris_med <- iris %>% group_by(Species) %>% summarise(Sepal.Length = median(Sepal.Length)) ggplot(iris, aes(x = Sepal.Length, y = Species)) + # 将fill的映射移到stat内部,避免geom_point继承 stat_density_ridges( geom = "density_ridges_gradient", calc_ecdf = TRUE, aes(fill = 0.5 - abs(0.5 - ..ecdf..)) ) + # 添加中位数点,这里的aes不会再继承fill的映射 geom_point( aes(x = Sepal.Length, y = Species), data = iris_med, color = "red", size = 3 # 可以调整点的大小让它更显眼 )
关键改动说明:
- 将
fill的美学映射从全局ggplot()中移到stat_density_ridges()内部,这样geom_point就不会继承这个需要计算ecdf的映射逻辑 - 显式加载
dplyr包(你的原始代码里用到了%>%、group_by()和summarise(),但没加载这个包,可能会导致另一个报错) - 给
geom_point增加了size参数,让中位数点在图上更突出
运行这段代码后,就能得到你期望的带点估计的密度脊图效果啦。
内容的提问来源于stack exchange,提问作者Hanjo Odendaal
相关产品推荐
相关产品推荐

