Каков наилучший способ расчета и отображения пиков объекта 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
... которая была моей первой догадкой.