首页 > 解决方案 > 计算和显示 ggplot2::geom_density() 对象的峰值的最佳方法是什么?

问题描述

我试图找到一种简单直观的方法来计算和显示 ggplot2::geom_density() 对象的峰值。

这个博客解释了如何在基础 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() 时,您不需要提供任何美学。

因此,如果确实 stat_peaks 是要走的路,有没有办法解决这个问题?也许对我的问题有更好的解决方案。

标签: rggplot2tidyverseggpmisc

解决方案


这是一个简单的解决方法。这个想法是调用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()

错误:stat_peaks 需要以下缺失的美学:y

...这是我的第一个猜测。


推荐阅读