Каков наилучший способ расчета и отображения пиков объекта ggplot2 :: geom_density ()? - PullRequest
0 голосов
/ 19 декабря 2018

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

В этом блоге объясняется, как это сделать вbase 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 Ответ

0 голосов
/ 19 декабря 2018

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

enter image description here

Я уверен, что этот подход может быть улучшен одним из мастеров ggplot2, который может объяснить, почему это не работает ...

ggplot(iris, aes(x = Petal.Length, y = stat(density))) +
  geom_density() +
  stat_peaks()

ошибка: stat_peaks требует следующую отсутствующую эстетику: y

... что было моим первым предположением.

...