ggplot2绘图

写函数:自己写一个作图函数就是这么简单

2023-02-02  本文已影响0人  KS科研分享与服务

函数(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的繁琐写代码!

觉得分享有用的点个赞再走呗!

上一篇 下一篇

猜你喜欢

热点阅读