Проблемы с указанием фасетов внутри функции - PullRequest
0 голосов
/ 27 мая 2020

У меня есть данные, похожие на dat1:

dat1 <- data.frame(Region = rep(c("r1","r2"), each = 100),
                   State = rep(c("NY","MA","FL","GA"), each = 10),
                   Loc = rep(c("a","b","c","d","e","f","g","h"),each = 5),
                   ID = rep(c(1:10), each=2),
                   var1 = rnorm(200),
                   var2 = rnorm(200),
                   var3 = rnorm(200),
                   var4 = rnorm(200),
                   var5 = rnorm(200))

Когда я запускаю этот ggplot(), обычно звоните

ggplot(dat1, aes(x=var1, y="..density..", color = Region))+
   geom_density(aes(y=..density..))+
   facet_wrap(~Region)

enter image description here

Но когда я пытаюсь превратить это в функцию, это не работает:

DensPlot <- function(dat, elm, groupvar){
  ggplot(dat1, aes_string(x=elm, y="..density..", color = groupvar))+
   geom_density(aes(y=..density..))+
   facet_wrap(~groupvar)
}
DensPlot(dat=dat1, elm="var1", groupvar = "Region")

Error: At least one layer must contain all faceting variables: `groupvar`.
* Plot is missing `groupvar`
* Layer 1 is missing `groupvar`

Функция будет работать без facet_wrap(), только построение одного графика. Что я могу сделать, чтобы функция работала с facet_wrap()?

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Вот простое решение:

DensPlot <- function(dat, elm, groupvar) {
  ggplot(data=dat, aes_string(x=elm, color=groupvar)) +
   geom_density(aes(y=..density..)) +
   facet_wrap(groupvar)
}
DensPlot(dat=dat1, elm="var1", groupvar = "Region")

enter image description here

1 голос
/ 27 мая 2020

Попробуйте сделать так. Вот интересная статья, которая может быть полезна. https://aosmith.rbind.io/2018/08/20/automating-exploratory-plots/

DensPlot <- function(dat, elm, groupvar){
  ggplot(dat, 
         aes(x=.data[[elm]],
             y="..density..", 
             color = .data[[groupvar]])) +
    geom_density(aes(y=..density..)) +
    facet_wrap(~.data[[groupvar]])}

DensPlot(dat = dat1, elm = "var1", groupvar = "Region")
...