美文网首页ggplot2绘图
写函数:自己写一个作图函数就是这么简单

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

作者: KS科研分享与服务 | 来源:发表于2023-02-02 14:27 被阅读0次

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/nhgwhdtx.html