我正试图找到一种简单直观的方法来计算和显示ggplot2 :: geom_density()对象的峰。
This blog解释了如何在base R中执行此操作,但这是一个多步骤过程。
但是使用ggpmisc包的stat_peaks()函数似乎更加直观。
但是,在运行下面的代码时,出现错误:stat_peaks requires the following missing aesthetics: y
library(tidyverse)
library(ggpmisc)
ggplot(iris, aes(x = Petal.Length)) +
geom_density() +
stat_peaks(colour = "red")
创建geom_density()时,您无需提供y的美感。
因此,如果确实要使用stat_peaks,是否可以解决此问题?也许对我的问题有更好的解决方案。
答案 0 :(得分:1)
这是一个简单的解决方法。想法是调用ggplot_build
,让ggplot
为您进行计算,然后从生成的对象中提取所需的y
美观度,在您的情况下为density
。< / p>
library(ggplot2)
library(ggpmisc)
p <- ggplot(iris, aes(x = Petal.Length)) +
geom_density()
pb <- ggplot_build(p)
p + stat_peaks(
data = pb[['data']][[1]], # take a look at this object
aes(x = x, y = density),
colour = "red",
size = 3
)
我确信可以通过周围的一个ggplot2向导来改进此方法,该向导可以解释为什么它不起作用...
ggplot(iris, aes(x = Petal.Length, y = stat(density))) +
geom_density() +
stat_peaks()
错误:stat_peaks需要以下美感:y
...这是我的第一个猜测。