计算和显示 ggplot2::geom_density() 对象的峰值的最佳方法是什么?
What is the best way to calculate and display peaks of a ggplot2::geom_density() object?
我正在尝试找到一种简单直观的方法来计算和显示 ggplot2::geom_density() 对象的峰值。
This blog 解释了如何在基础 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 确实是可行的方法,是否有解决此问题的方法?也许我的问题有更好的解决方案。
这是一个简单的解决方法。这个想法是调用 ggplot_build
,让 ggplot
为您进行计算,然后从结果对象中提取所需的 y
美学,在您的情况下是 density
。
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()
error: stat_peaks requires the following missing aesthetics: y
...这是我的第一个猜测。
我正在尝试找到一种简单直观的方法来计算和显示 ggplot2::geom_density() 对象的峰值。
This blog 解释了如何在基础 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 确实是可行的方法,是否有解决此问题的方法?也许我的问题有更好的解决方案。
这是一个简单的解决方法。这个想法是调用 ggplot_build
,让 ggplot
为您进行计算,然后从结果对象中提取所需的 y
美学,在您的情况下是 density
。
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()
error: stat_peaks requires the following missing aesthetics: y
...这是我的第一个猜测。