我想创建一个用户定义的函数,它包含我发现的一些流行的 ggplot 代码。我收到以下错误:
"Error in `[.data.frame`(DS, , xvar) : object 'xcol' not found"
Run Code Online (Sandbox Code Playgroud)
下面是一个小的伪数据集来说明这个问题。
n=25
dataTest <- data.frame(xcol=sample(1:3, n, replace=TRUE), ycol = rnorm(n, 5, 2), Cat=letters[1:5])
Run Code Online (Sandbox Code Playgroud)
用户定义的代码如下:
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, …
Run Code Online (Sandbox Code Playgroud) 我创建了一个函数,它将数据帧,x和y变量以及一个组变量作为参数,它通过组变量的x变量和facet的级别输出一个条形图.我想在条形图上方放置一个文本标签,代表y的平均值.我的功能一直工作,直到我的功能如下:
XTABAR<- function(DS,xcat,yvar,group,formet=percent,color1=orange,color2=blue,...){
library(ggplot2)
library(dplyr)
library(scales)
localenv<-environment()
gg<-data.frame(DS,x=DS[,xcat],y=DS[,yvar],z=DS[,group] )
gg = transform(summarise(group_by(gg, x), sumvar= mean(y)))
G<-ggplot(gg,aes(x=factor(x),y=y, fill=factor(x)))+stat_summary(fun.y=mean,geom="bar")+facet_wrap(~z)+scale_y_continuous(labels = formet)+xlab(xcat)+ylab(yvar)+scale_fill_manual(values=c(color1,color2))
#H<-G+geom_text(data=gg,aes(label=sumvar,x=factor(x),y=y), position = position_dodge(width = 0.8), vjust=-.6)
H<-G+stat_summary(fun.y = mean, geom="text", aes(label=sumvars), vjust = 0)
#G+scale_fill_manual(values=c("orange","blue"))+ylab("Boo")+xlab("Foo")+scale_y_continuous(labels = met)
print(H)
}
# The arguments are dataframe (DS); x variable (xcat) y variable (yvar); grouping variable (group) y scale format (formet); and colors for bars
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
Error in layout_base(data, vars, drop = drop) :
At least one layer must contain all variables used …
Run Code Online (Sandbox Code Playgroud)