Исправление и объединение пиков в графике плотности наложения от rstudio - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблемы со сравнением нескольких плотностей и мне нужна помощь от мастеров R.

Я сравниваю данные временных меток, собранные за 7 различных периодов времени (30, 45, 60, 90, 120, 180 и 240 минут) с точки зрения плотности. Я построил наложенный график KDE, используя ggplot2.

enter image description here

На следующем шаге я пытаюсь согласовать координату y каждого пика с 1 и настроить остальную плотность очки соответственно. Поэтому в основном я буду умножать каждую функцию KDE на константу, которая делает каждый пик равным 1 (а затем визуализировать скорректированные данные путем построения «графика KDE для согласованного пика»).

Как я могу сделать это в Rstudio?

1 Ответ

0 голосов
/ 23 апреля 2020

Это своего рода хаки sh, и может быть более чистый способ сделать это. Я собираюсь использовать набор данных радужной оболочки здесь.

library(ggplot2)
library(dplyr)

Сначала построим типовой график плотности:

p <- ggplot(iris, aes(x = Sepal.Length, colour = Species)) + 
  geom_density()
p

enter image description here

Функция ggplot_build() позволяет получить доступ к внутренней информации графика.

p_build <- ggplot_build(p)

В этом списке есть объект data, в котором хранятся сопоставленные координаты, полученные в результате вызова geom_density(). Я возьму это.

p_mod <- p_build$data[[1]]

Тогда я сделаю настройку. Сначала мне нужно восстановить sh, к каким группам относятся цвета, а затем я переустанавливаю для каждого цвета значение y по желанию:

p_modded <- p_mod %>%
  mutate(Species = case_when(colour == "#F8766D" ~ "setosa",
                             colour == "#00BA38" ~ "versicolor",
                             TRUE ~ "virginica")) %>% 
  group_by(colour) %>% 
  mutate(y = y / max(y)) %>% 
  ungroup()

А теперь новый график. Обратите внимание, что мне не нужно использовать geom_density(), потому что плотность уже рассчитана, поэтому мне просто нужно использовать geom_line().

    ggplot(p_modded, aes(x = x, y = y, colour = Species)) + 
  geom_line()

enter image description here

...