美文网首页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的繁琐写代码!

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

相关文章

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

    函数(function),我们上学的时候一直在学,函数是一种对应关系,提供参数,提供值,得到结果。在生信分析中,函...

  • UE 5 初学12【小技巧】-- 写一个简单的蓝图函数

    通过本节可以学会,使用蓝图写一个极其简单的函数,这个函数的功能就是welCome(playername:strin...

  • Kotlin的函数

    我们先看看简单的函数 我们写一个求和函数 sum函数有几部分构成呢?两部分,函数头和函数体。 函数头 fun 函数...

  • C#近期总结汇

    一、构造函数及属性 构造函数简单讲就是实例化一个对象,初始化; 属性就是将字段添加Get or Set,使其限定写...

  • 我建议这样思路写组件

    我建议这样思路写组件:首先一个大函数就是一个模块,可以简单到只是用function写,通过config对象写配置。...

  • 复习笔记之函数进阶(2)

    递归 如果一个函数在内部可以调用其本身,那么这个函数就是递归函数简单理解:函数内部自己调用自己就是递归函数(递归函...

  • Swift学习_基本语法之函数

    1.简单函数 2.无参函数 无参函数就是在小括号里不写参数就行 3.无返回值函数 ** 无返回值函数有三种写法**...

  • Dart入门03 -- 函数,闭包,运算符,枚举

    函数 函数的定义 函数返回值类型可以省略,开发中不推荐这么写; 函数的参数 Dart中不支持函数的重载; 函数的参...

  • 2018-10-12 Day 10 函数应用作业(功能尽量自己写

    函数功能自己写,少用或者不用自带函数 1.写一个函数将一个指定的列表中的元素逆序(如[1, 2, 3] -> [3...

  • 装饰器详解

    装饰器详解 简单实例教程 需要装饰的函数 装饰器的参数是方法名,就是被装饰的函数 被装饰的函数需要这样写 调用 结...

网友评论

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

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