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

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

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

  1. C语言sum函数不接受一个参数,函数不接受2个参数怎么解决

    c++函数不接受两个参数是为什么 class Time { int hour,minute,second; public: Time(int a=0,int b=0,i需要在使用之前声明一下函数,你在 ...

  2. matlab创建一个函数,matlab定义一个新函数

    本文收集整理关于matlab定义一个新函数的相关议题,使用内容导航快速到达. 内容导航: Q1:matlab怎么建立自定义函数 自定义函数的格式: function 函数名(参数) 函数表达式 end ...

  3. 【C语言函数】编写一个C函数,实现保留小数点后第N-1位,从第N位四舍五入。

    编写一个C函数,实现保留小数点后第N-1位,从第N位四舍五入.用该函数对数组a[5]中的各元素从小数点后第2位开始四舍五入. a[5]={2.33,2.56,2.65,2.66,2.30} **输出格 ...

  4. matlab 画多个函数,Matlab中一个figure函数画多个子图和多个figure函数画多个字图...

    此博文仅为个人学习笔记,仅供个人使用. 1.如何在一个figure里面画多个子图. %subplot(x,y,n)x表示显示的行数,y表示列数,n表示第几幅图片 figure,subplot(221) ...

  5. c语言有参有类最小公倍数,【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数...

    程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...

  6. 处理菱形继承问题实现一个虚函数的覆盖及调用实现以下几个类的成员函数...

    #include <iostream> #include <string> using namespace std; 1.实现以下几个类的成员函数 2.实现一个虚函数的覆盖及调 ...

  7. 高阶函数、js函数内返回一个内部函数详解---->函数柯里化

    高阶函数 如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数. 若A函数,接收的参数是一个函数,那么A就可以称之为高阶函数. 若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函 ...

  8. Python基础第六天——函数的使用、函数的参数、函数的返回值、函数的嵌套、命名空间、作用域、函数对象...

    一.拾遗 1.通常情况下无参函数只是进行操作,所以不需要返回值:有参数函数则需要返回值. 2.练习: 判断用户输入一串字符,如果这串字符的长度小于5则重新输入,如果大于5则退出循环. while Tr ...

  9. 前端:JS/22/函数(函数的概念,函数的定义格式,函数定义格式的说明,函数的调用,函数的参数),全局变量和局部变量,拷贝传值和引用传址,匿名函数,二维数组,对象,自定义对象的创建

    函数 1,函数的概念 函数,是将一段公共的代码进行封装,给它起个名字叫"函数" 函数可以一次定义,多次调用:函数可以将常用的功能代码,进行封装,如:用户名的验证,验证码函数,邮箱验 ...

最新文章

  1. 人工智能高薪的背后……
  2. uniapp中动态修改导航栏标题
  3. OSChina 周五乱弹 —— 一句话证明你看过此乱弹~
  4. 第二十三讲 狄拉克函数(冲激函数)(补充)
  5. Sublime Less 自动编译成css
  6. 时间序列错位还原之SQL实现案例详解
  7. PHP javascript 值互相引用(不用刷新页面)
  8. 一位40岁“老程序员”的经历,给你们说一些我的真实想法!
  9. potplayer 多个进程_创建守护进程的步骤
  10. C语言这么难,为何大家都如飞蛾扑火般学习?现在带你揭秘
  11. 【ElasticSearch】Es 源码之 PersistentTasksExecutorRegistry 源码解读
  12. gfirefly 框架分析
  13. Visio是一个很好的UML建模软件和一个很好的制图软件
  14. c++大作业--学籍管理系统--
  15. 五子棋AI算法(一)
  16. 知网查重报告html乱码,知网查重报告乱码如何解决?
  17. Neo4j Desktop图数据库导出
  18. bongo cat mver手机版|键盘猫手机版
  19. 【科创人】瑞云创始人汪忠田:售后服务SaaS市场拓荒者
  20. 易优cms中英文版如何分开调用不同模板

热门文章

  1. 坚果pro2 android 版本,坚果Pro2有哪些版本_坚果Pro2内存多大-太平洋IT百科
  2. symbian字体使用方法汇总
  3. 如何从 RHEL 8 升级到 RHEL 9 版本?
  4. Python 处理医学影像学中的DICOM
  5. 171116 逆向-初探PCQQ防撤回
  6. 点播影院——影院微信运营新模式
  7. CentOS7 CMatrix
  8. C#调用银联接口 posinf.dll方法调用
  9. 使用simsun的黑体
  10. 物联网大数据平台TIZA STAR架构解析