我想创建一个用户定义的函数,将其包装在我找到的一些流行的ggplot代码周围。我遇到了以下错误:
以下是一个小的伪数据集,用于说明该问题。
用户定义的代码如下所示:
我将尝试运行的函数如下:
"Error in `[.data.frame`(DS, , xvar) : object 'xcol' not found"
以下是一个小的伪数据集,用于说明该问题。
n=25
dataTest <- data.frame(xcol=sample(1:3, n, replace=TRUE), ycol = rnorm(n, 5, 2), Cat=letters[1:5])
用户定义的代码如下所示:
TRIPLOT <- function (DS,xvar,yvar,zvar) {
#localenv<-environment()
gg <- data.frame(x=DS[,xvar],y=DS[,yvar],fill=DS[,zvar])
empty<-ggplot()+geom_point(aes(1,1),colour="white") + theme(
plot.background = element_blank(),
panel.background = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank())
scatter <-ggplot(gg, aes_string(x=xvar,y=yvar), environment=environment())+
geom_point(aes_string(color=zvar))+
scale_color_manual(values=c("orange","purple"))+
theme(legend.position=c(1,1), legend.justification=c(1,1))
plot_top <- ggplot(gg,aes_string(x=xvar, fill=zvar), environment=environment())+geom_density(alpha=.5)+scale_fill_manual(values=c("orange","purple"))+theme(legend.position="none")
plot_right <- ggplot(gg, aes_string(yvar, fill=zvar),environment=environment())+geom_density(alpha=.5)+coord_flip()+ scale_fill_manual(values=c("orange","purple"))+
theme(legend.position="none", axis.title.x=element_blank())
PLT <- grid.arrange(plot_top,empty,scatter,plot_right, ncol=2,nrow=2,widths=c(4,1), heights=c(1,4))
print(PLT)
}
我将尝试运行的函数如下:
TRIPLOT(dataTest,"xcol","ycol","Cat")
我按照帖子的建议添加了环境参数和data.frame()参数。我也已经将这些参数用引号传递给函数。 感谢您的任何帮助。
aes
代替aes_string
。 - Sandy Musprattgrid.arrange
,因为轴通常不会对齐。这里有一些帖子介绍了使用gtable
实现此目的的方法。 - baptiste