Графики линейной плотности

В настоящее время у меня есть данные, которые говорят мне об артериальном давлении по возрасту для тех, кому 10-18 лет. Я хотел бы создать график плотности для каждого возраста, аналогичный графику для скрипки.

Это будет выглядеть так, но только с графиками плотности.

Суть в том, чтобы получить гистограмму для каждого возраста, а затем перевернуть ее и построить график, где ось X — это возраст, а ось Y — артериальное давление. Мне кажется, что я уже видел это раньше, но не могу вспомнить, где.

Спасибо за любую помощь!


person Phillip Black    schedule 03.05.2016    source источник
comment
Пожалуйста, сделайте воспроизводимый пример: stackoverflow.com/questions/5963269/.   -  person tonytonov    schedule 04.05.2016


Ответы (2)


Я думаю, что это должно сделать трюк:

# load libraris
  library(ggplot2)
  library(ggthemes)

# load data
  data(iris)


# Plot
  ggplot(data = iris) +
    geom_density( aes(x=Sepal.Length), fill="red", color="red") +
    facet_grid(.~Species) +
    theme_minimal() +
    coord_flip()

введите здесь описание изображения

Вы также можете использовать geom_violin:

  ggplot(data = iris) +
    geom_violin( aes(x=Species, y=Sepal.Length), fill="red", color="red") +
    geom_jitter( aes(x=Species, y=Sepal.Length), fill="gray", color="gray") +
    theme_minimal() 

введите здесь описание изображения

В любом случае ваша переменная артериального давления эквивалентна Sepal.Length, представленной здесь, а ваша категориальная переменная возраста эквивалентна Species как factor().

person rafa.pereira    schedule 04.05.2016

Ключом к этому может быть сочетание нескольких функций:

  1. Используйте давление в качестве оси X, а затем переверните ось координат.
  2. Используйте возраст, чтобы сделать фактическую сетку зависимой от него. Не забудьте заранее сделать возраст factor!

Вот минимальный пример со случайно сгенерированными данными для людей от 25 до 30 лет и артериального давления от 50 до 150 (не знаю, насколько это реалистично):

data <- data.frame(age=round(runif(1000, 25, 30)), pressure=round(runif(1000, 50, 150)))
data$age <- factor(data$age)

library(ggplot2)
ggplot(data, aes(x=pressure)) +
  geom_density() +
  coord_flip() +
  facet_grid(.~age)

введите здесь описание изображения

person Make42    schedule 04.05.2016