Несколько распределений на одном графике - с помощью функции geom_density из ggplot2 - PullRequest
0 голосов
/ 17 октября 2018

Я думаю, что я очень близок к тому, чтобы сделать этот код, но я что-то здесь упускаю.Я хочу «объединить» два графика в один, например, так:

Normal distributions Первый график имеет такой код:

  ggplot(test, aes(y=key,x=value)) + 
  geom_path()+
  coord_flip()

А второйэтот ниже:

  ggplot(test, aes(x=value, fill=key)) +
  geom_density() +
  coord_flip()

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

Пожалуйста, используйте этот код, чтобы воспроизвести мой вопрос:

library(tidyverse)
test <- data.frame(key = c("communication","gross_motor","fine_motor"),
                   value = rnorm(n=30,mean=0, sd=1))
ggplot(test, aes(x=value, fill=key)) +
  geom_density() +
  coord_flip()

ggplot(test, aes(y=key,x=value)) + 
  geom_path(size=2)+
  coord_flip()

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Возможно, вас заинтересуют участки с ребристыми линиями из пакета ggridges .

Участки с ребристыми линиями - это частично перекрывающиеся участки, которые создают впечатление горного хребта.Они могут быть очень полезны для визуализации изменений в распределениях во времени или пространстве.

library(tidyverse)
library(ggridges)

set.seed(123)
test <- data.frame(
  key = c("communication", "gross_motor", "fine_motor"),
  value = rnorm(n = 30, mean = 0, sd = 1)
)

ggplot(test, aes(x = value, y = key)) + 
  geom_density_ridges(scale = 0.9) + 
  theme_ridges() +
  NULL
#> Picking joint bandwidth of 0.525

Добавить срединную линию:

ggplot(test, aes(x = value, y = key)) +
  stat_density_ridges(quantile_lines = TRUE, quantiles = 2, scale = 0.9) +
  coord_flip() +
  theme_ridges() +
  NULL
#> Picking joint bandwidth of 0.525

Имитация коврика:

ggplot(test, aes(x = value, y = key)) + 
  geom_density_ridges(
    jittered_points = TRUE,
    position = position_points_jitter(width = 0.05, height = 0),
    point_shape = '|', point_size = 3, point_alpha = 1, alpha = 0.7,
  ) +
  theme_ridges() +
  NULL
#> Picking joint bandwidth of 0.525

Создано в 2018-10-16 пакетом Представить (v0.2.1.9000)

0 голосов
/ 17 октября 2018

Я думаю, что самый простой способ сделать это с facet_wrap().Если вам не нравится внешний вид фасетов по умолчанию, вы можете настроить их с помощью theme(), например:

ggplot(test, aes(x=value, fill=key)) +
    geom_density() +
    facet_wrap(~ key) +
    coord_flip() +
    theme(panel.spacing.x = unit(0, "mm"))

Результат:

density plots

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...