查看: 1204|回复: 6

[R语言] R语言绘制韦恩图学习笔记分享

[复制链接]
  • TA的每日心情

    前天 11:07
  • 签到天数: 95 天

    连续签到: 2 天

    [LV.6]常住居民II

    管理员

    Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

    主题
    352
    奥币
    906
    积分
    5105
    注册时间
    2018.4.19
    在线时间
    806 小时

    推广达人宣传达人


    发表于 2019.4.30 09:19:01 | 显示全部楼层 |阅读模式
    在之前的《如何绘制漂亮的“花瓣”韦恩图?》《介绍一种简单的韦恩图绘制方法》已经为大家介绍如何用OmicShare tools和Origin绘制韦恩图,今天再为大家介绍下如何用R语言的VennDiagram包绘制韦恩图。

    如果你是R语言小白,欢迎参加基迪奥“R语言入门与微生物组数据挖掘”培训班(简称“微生物培训班”),今天的内容仅是这次培训班R作图的一个小案例。

    #安装加载VennDiagram包;
    install.packages("VennDiagram")
    #加载VennDiagram包;
    library(VennDiagram)
    #读入数据;
    data= read.table("venndata.txt",header =TRUE,row=1,sep="\t")
    head(data)



    #获取行名;
    otus =rownames(data)   
    head(otus)
    #获取列名;
    sets =colnames(data)  
    sets



    #指定比较组,以"_"分隔;
    option ="MO-MU-SJ-SA"  
    option
    #获取指定的新分组名称;
    newgroup =unlist(strsplit(option,"-"))
    newgroup



    #生成空列表;
    x =list()
    #将每个分组绝对丰度值大于0的otu id列表逐一存到列表x中,[]选取数据框、矩阵、向量中的元素,[[]]选取列表中的元素;
    for(i in newgroup){
      x[]=otus[as.numeric(data[,i])>0]
    }

    #查看列表x的结构;
    str(x)



    #载入个人收藏的wesanderson包颜色列表;
    Chevalier1<-c("#355243","#fbca50","#c9d5d4","#baa28a")
    FantasticFox1<-c("#d37a20","#dbcb09","#3a9cbc","#dd7208","#a30019")
    Moonrise3<-c("#75cbdc","#f0a4af","#8a863a","#c2b479","#f8d068")
    Cavalcanti1<-c("#ceab0d","#083215","#919562","#6f997a","#831e11")
    Darjeeling2<-c("#e6c09e","#0d5888","#cb8b3e","#9cd6d6","#000000")
    Darjeeling1<-c("#fb0007","#139177","#ed9e08","#f56f08","#4caecc")
    Royal2<-c("#e4c9b2","#f1c2a5","#f49d98","#fcd68f","#629076")
    IsleofDogs2<-c("#e4c9b2","#998273","#a6723d","#2b2523","#151213")
    #设置颜色列表,因为最多只能画五个分组的韦恩图,这里最多设置5种颜色;
    color_list = Darjeeling1
    #依照指定的新分组数选取颜色列;
    fill_colors = color_list[1:length(x)]fill_colors



    #获取系统日期;
    date<-Sys.Date()
    date
    #生成包含日期的文件名,paste()函数用于字符串粘合,strsplit()的逆操作;
    filename =paste(option,"-",date,".venn.tiff",sep="")
    filename



    #绘制韦恩图,并导出到工作目录;
    venn.diagram(x,col="white",fill=fill_colors,lwd=.5,filename=filename,cex=.5,cat.cex=.5,width=1200,height=1200)
    最终结果如下:



    以上的内容是以绘制4组数据的韦恩图为例,在指定比较组的那一步,可根据自己的数据自由指定分组(<6组)。例如,当option = "MU-SJ-SA"时,即可得到这3列数据(分组)的韦恩图,如下:



    你甚至还可以尝试其他配色方案,如下图,得到令自己满意的配色。



    最后,如果你是做微生物研究的,而且恰巧想学习R语言,可以参加基迪奥为期5天的“R语言入门与微生物组数据挖掘”培训班(简称“微生物培训班”),本期培训课程中,R语言几乎穿于整个微生物组学分析过程。
    5天时间,想秒变生信大神几乎是不可能的。但至少能让你看得懂测序公司给的一大堆数据;至少能让你R语言入门,具备能够自己导入数据,独立完成数据的个性化分析作图能力。 下面是本次培训的课表和报名方式,更多详情可通过OmicShare查看,链接:http://www.omicshare.com/train
    课表


    培训班报名方式

    扫描二维码报名

    本文作者:基迪奥莫北


                   



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情

    3 天前
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]以坛为家I

    钵水母

    Rank: 3Rank: 3

    主题
    0
    奥币
    1084
    积分
    131
    注册时间
    2016.12.6
    在线时间
    87 小时

    发表于 2019.4.30 11:29:32 | 显示全部楼层
    赞,刚好也在画韦恩图
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    好棒
    8 小时前
  • 签到天数: 106 天

    连续签到: 3 天

    [LV.6]常住居民II

    帝王蝶

    Rank: 4

    主题
    4
    奥币
    536
    积分
    310
    注册时间
    2018.8.23
    在线时间
    42 小时

    活跃会员


    发表于 2019.4.30 13:30:33 | 显示全部楼层
    学习了了
    回复

    使用道具 举报

  • TA的每日心情
    no
    2019.5.16 19:25
  • 签到天数: 58 天

    连续签到: 4 天

    [LV.5]常住居民I

    帝王蝶

    Rank: 4

    主题
    4
    奥币
    204
    积分
    336
    注册时间
    2018.7.8
    在线时间
    22 小时

    发表于 2019.4.30 20:48:34 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    no
    2019.5.16 19:25
  • 签到天数: 58 天

    连续签到: 4 天

    [LV.5]常住居民I

    帝王蝶

    Rank: 4

    主题
    4
    奥币
    204
    积分
    336
    注册时间
    2018.7.8
    在线时间
    22 小时

    发表于 2019.4.30 20:49:05 | 显示全部楼层
    学习学习
    回复

    使用道具 举报

  • TA的每日心情
    no
    2019.5.16 19:25
  • 签到天数: 58 天

    连续签到: 4 天

    [LV.5]常住居民I

    帝王蝶

    Rank: 4

    主题
    4
    奥币
    204
    积分
    336
    注册时间
    2018.7.8
    在线时间
    22 小时

    发表于 2019.4.30 20:51:12 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    忙~
    昨天 16:02
  • 签到天数: 346 天

    连续签到: 1 天

    [LV.8]以坛为家I

    钵水母

    Rank: 3Rank: 3

    主题
    0
    奥币
    1416
    积分
    107
    注册时间
    2016.5.16
    在线时间
    67 小时

    发表于 2019.6.23 22:16:18 | 显示全部楼层
    请问版主,在用x=ls()生成空列表之后,的下一步,是不是代码有误呀?我按照 for(i in newgroup){x[]=otus[as.numeric(data[,i]>0)]}输入,得到的str(x)依然是空列表。如果按照for(i in newgroup){x=otus[as.numeric(data[,i]>0)]},输入,得到的则是chr[1:410] “otu000001”等等
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表