Каков наилучший способ расчета и отображения пиков объекта ggplot2::geom_density()?

Я пытаюсь найти простой и интуитивно понятный способ вычисления и отображения пиков объекта ggplot2::geom_density().

Этот блог объясняет, как сделать это в базе R, но это многоступенчатый процесс.

Но кажется гораздо более интуитивным использовать функцию stat_peaks() пакета ggpmisc.

Однако при выполнении кода ниже я получаю сообщение об ошибке: 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 - это путь, есть ли способ обойти эту проблему? Возможно, есть лучшее решение моей проблемы.

1 ответ

Вот простой обходной путь. Идея состоит в том, чтобы позвонить 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

... которая была моей первой догадкой.

Другие вопросы по тегам