功能将不同数量的图层添加到ggplot

时间:2015-07-03 09:55:03

标签: r function ggplot2

我在生成ggplot时遇到问题。

我的情节是一个简单的盒子图,但带有额外的注释。

这些注释是多重比较的显着性水平。

DatamineR在这里更好地解释了这一点:How to draw the boxplot with significant level?

我只想绘制那些显着不同并希望功能强大的功能。

所以为了简单起见,我只想将X行添加到ggplot中

示例:

custom.plot <- function{
    n.sig <- number of significant observations obtained by a different function 
    my.plot <- ggplot(data,aes(x,y)) + geom_boxplot()
    ### HERE should be a function that adds other layers to my plot
}

我现在如何制作一个能为我的情节添加n.sig行的功能?

n.sig = 3

意味着以下内容:

my.plot +
 geom_line(data1,aes(x1,y1))+
 geom_line(data2,aes(x2,y2))+
 geom_line(data3,aes(x3,y3))

我已经拥有geom_line个函数的所有数据框,我发现我可以使用这个函数创建一个函数调用

do.call("geom_line",list("data1","aes(x1,y1)")

但是我怎样才能将它变成ggplot的一个大函数调用?

换句话说,我想要为基础图编写的这个函数在ggplot2中工作:

all.f <-function(x,y){
boxplot(data[,y]~data[,x],ylab=y,xlab="")
dt <- dunn.test(data[,y],data[,x],method="bonferroni")
### Split outcome by group
out.sp <- split(data[,y],data[,x])
len.vars <- sapply(out.sp,length)
len.all <- length(len.vars)
imp.dt<-which(dt$P.adjusted<0.05)
check.pairs <- function(x){
    if(x==1){
        return(cbind(1,2))
    }else if(x==2){
        return(cbind(1,3))
    }else if(x==3){
        return(cbind(2,3))
    }else if(x==4){
        return(cbind(1,4))
    }else if(x==5){
        return(cbind(2,4))
    }else if(x==6){
        return(cbind(3,4))
    }else if(x==7){
        return(cbind(1,5))
    }else if(x==8){
        return(cbind(2,5))
    }else if(x==9){
        return(cbind(3,5))
    }else if(x==10){
        return(cbind(4,5))
    }else{
        return(NA)
        }
}
connections <- sapply(imp.dt,check.pairs)
n.connections <- length(imp.dt)
df.con <- list(NULL)
my <-max(data[,y],na.rm=T)

cord <- NULL
for(i in 1:n.connections){
    cord <- c(cord,my-((0+i)*my*0.03))
}

connect<-matrix(rbind(connections,cord),nrow=3)

boxplot(data[,y]~data[,x],ylab=y,xlab="")
if(!n.connections==0){
 for(i in 1:n.connections){
    segments(connect[1,i],connect[3,i],connect[2,i],connect[3,i])
 }
} else {
    NULL
}
}

在mtcars上运行它:

data<-mtcars
data$cyl<-as.factor(data$cyl)
all.f("cyl","mpg")

0 个答案:

没有答案