函数(function),我们上学的时候一直在学,函数是一种对应关系,提供参数,提供值,得到结果。在生信分析中,函数一直在用,只不过我们使用的是打包的函数,都集成在R包。那么自己写函数可不可以呢,当然可以,写函数能够提高自己的工作效率,减少不必要的重复工作。****这里跟随小编的视角,从一个简单的例子出发,看看怎么写一个函数!创建函数使用function即可。(****相关数据函数已上传群文件****)****我们创建一个做分组箱线图的函数,其实就是把作图的类容包装起来,有一些需要修改的参数提取出来,面对不同的对象时赋值即可。
plot.boxplot <- function(data,
x,
y,
type,
title=NULL,
legend=NULL){
a <- ggplot(data=data, aes(x =x, y =y ,color=type,group=type)) +
geom_jitter(alpha = 0.3,size=3) +
geom_boxplot(alpha = .5,size=1)+
labs(x= NULL, y="Expression",fill= "group")+
ggtitle(title)+
theme_bw() +
theme(panel.border = element_blank(),
axis.line = element_line(size=1, colour = "black"),
panel.grid =element_blank(),
axis.text = element_text(size = 12,colour = "black"),
axis.text.x = element_text( hjust = 1,angle = 45),
axis.title = element_text(color = "black", size = 15),
plot.title = element_text(size=15,hjust=0.5, color = 'black'))+
scale_x_discrete(limit = c("Asymptomatic","Critical","Mild","Severe"))+
scale_color_manual(limits=c("Asymptomatic","Critical","Mild","Severe"),
values=c("#85B22E","#5F80B4","#E29827","#922927"))
return(a)
}
plot.boxplot(df,
x=df$Type,
y=df$CXCL8,
type=df$Type,
title = "CXCL8")
图片 可以看出,其实就是将ggplot作图包装在里面了,不过这个函数还不是很好,首先作图的颜色,分组顺序不能修改,我们将其变成参数即可。这里为了演示逻辑,我还写了一个legend的设置。
plot.boxplot <- function(data,
x,
y,
type,
title=NULL,
legend=NULL,
group,
cols){
a <- ggplot(data=data, aes(x =x, y =y,color=type,group=type)) +
geom_jitter(alpha = 0.3,size=3) +
geom_boxplot(alpha = .5,size=1)+
labs(x= NULL, y="Expression",fill= "group")+
ggtitle(title)+
theme_bw() +
theme(panel.border = element_blank(),
axis.line = element_line(size=1, colour = "black"),
panel.grid =element_blank(),
axis.text = element_text(size = 12,colour = "black"),
axis.text.x = element_text( hjust = 1,angle = 45),
axis.title = element_text(color = "black", size = 15),
plot.title = element_text(size=15,hjust=0.5, color = 'black'))+
scale_x_discrete(limit = group)+
scale_color_manual(values=cols)
if (!legend == FALSE) {
return(a)}
else {
b <- a+theme(legend.position = 'none')
return(b)
}
}
plot.boxplot(df,
x=df$Type,
y=df$CXCL8,
type=df$Type,
title = "CXCL8",
legend = FALSE,
group=c("Critical","Asymptomatic", "Mild","Severe"),
cols = c("#85B22E","#5F80B4","#E29827","#922927"))
plot.boxplot(df,
x=df$Type,
y=df$CXCL8,
type=df$Type,
title = "CXCL8",
legend = FALSE,
group=c("Critical", "Mild","Asymptomatic","Severe"),
cols=c('red','orange','blue','purple'))
图片
现在这个函数就比较通用了,只需要每次将数据整理成需要的格式即可。下面我们演示下,只提供两个组的数据,作图也是没有问题的。
df1 <- read.csv("df1.csv", header = T)
plot.boxplot(df1,
x=df1$Type,
y=df1$FOXO3,
type=df1$Type,
title = "FOXO3",
legend = FALSE,
group=c("Mild","Severe"),
cols=c('red','orange'))
图片
当然了,函数的参数还可以有更多的调整,不过普通作图也就这些了,很简单,可以根据自己的实验室风格调整,最后这个函数就可以长期使用了。不必每次按照ggplot的繁琐写代码!
觉得分享有用的点个赞再走呗!
网友评论