Цикл по переменным в ggplot для создания сетки распределений плотности для каждой переменной - PullRequest
0 голосов
/ 26 ноября 2018

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

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

1 Ответ

0 голосов
/ 26 ноября 2018

Рассмотрите возможность преобразования данных в длинный формат, чем черчение с фасетами.Здесь и 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") 

Plot Output

...