在函数中指定方面的问题
Issues specifying facets within a function
我有类似的数据 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)
但是当我尝试将其转换为函数时它不起作用:
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()
一起使用?
尝试这样做。这是一篇有趣的文章,可能会有帮助。
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")
这是一个简单的解决方案:
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")
我有类似的数据 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)
但是当我尝试将其转换为函数时它不起作用:
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()
一起使用?
尝试这样做。这是一篇有趣的文章,可能会有帮助。 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")
这是一个简单的解决方案:
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")