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

Я хочу создать сетку графиков распределения плотности со средней пунктирной вертикальной линией для нескольких переменных, которые есть в наборе данных. Используя набор данных mtcars в качестве примера, код для графика с одной переменной будет следующим:

ggplot(mtcars, aes(x = mpg)) + geom_density() + geom_vline(aes(xintercept = 
mean(mpg)), linetype = "dashed", size = 0.6) 

Я не понимаю, как я изменяю это, чтобы он перебирал указанные переменные в моем наборе данных и создавал сетку с графиками каждой из них. Похоже, это потребует некоторой комбинации добавления facet_grid и аргумента «vars», но я пробовал несколько комбинаций безуспешно.

Похоже, что во всех примерах, которые я могу найти в Интернете, facet_grid разбивает графики на подмножества переменной, сохраняя при этом одинаковые x и y для каждого графика, но я хочу, чтобы график x варьировался на каждом графике, а y - плотность ценностей.

Пытаясь решить эту проблему, я также понимаю, что новый выпуск ggplot включает что-то, связанное с «квазиквотированием», которое может помочь решить мою проблему (https://www.tidyverse.org/articles/2018/07/ggplot2-tidy-rating/), но опять же, я не мог выяснить, как применить приведенные здесь примеры к моей собственной проблеме.


person Ella Wind    schedule 26.11.2018    source источник
comment
Все примеры, которые вы нашли с facet_grid, подходят, вам просто не хватает того факта, что вам нужно немного преобразовать свои данные, чтобы они работали. Вы будете использовать что-то вроде gather из tidyr для преобразования набора переменных (столбцов) в одну пару столбцов: столбец с ключом и столбец со значением. Затем вы столкнетесь с ключевой переменной, а переменная-значение будет вашей новой переменной y.   -  person joran    schedule 26.11.2018
comment
(Извините, небольшая опечатка, я имел в виду новую переменную x, поскольку вы наносите на график плотности.)   -  person joran    schedule 26.11.2018
comment
Вау, похоже, это помогает! Просто для тех, кто плохо знаком с R, как я, кто хочет увидеть решение, я сделал это, чтобы получить два графика для переменных mtcars disp и hp: mt_density <- mtcars %>% gather(disp, hp, key = "variable", value = "value") ggplot(mt_density, aes(x = value)) + geom_density() + geom_vline(aes(xintercept = mean(value)), linetype = "dashed", size = 0.6) + facet_grid(. ~ variable)   -  person Ella Wind    schedule 26.11.2018


Ответы (1)


Рассмотрите вариант преобразования данных в длинный формат, чем построение графиков с фасетами. Здесь обе шкалы x и y свободны, поскольку графики различаются по величине в столбцах.

rdf <- reshape(mtcars, varying = names(mtcars), v.names = "value", 
               times = names(mtcars), timevar = "variable",
               new.row.names = 1:1000, direction = "long")

ggplot(rdf, aes(x = value)) + geom_density() + 
  geom_vline(aes(xintercept = mean(value)), linetype = "dashed", size = 0.6) +
  facet_grid(~variable, scales="free") 

Вывод сюжета

person Parfait    schedule 26.11.2018