UpSetR作图

2020-05-08  本文已影响0人  RaoZC

UpSetR的意义

做Venn图,在4个以下有较好的效果,而花瓣图则信息量较低,现在找到一种叫做UpSetR图(是这么叫吗?看了两篇文章都是这么叫)的方法,可以很好地替代花瓣图。
先安装

install.package("UpsetR")

安装好后,设定工作路径,读入包和数据:

setwd("G:/工作/分析/57. 扩增子分析-蝠蛾24样本/02. 分析/ITS/03.共有特有OTU")
library(UpSetR)
a = read.table("UpSetR-16S.txt",header = T)
head(a)

先观察数据,就是简单的表格即可,但需要先将数据变成0-1形式。
数据结构如下:


数据结构

数据输入后,即可以使用以下代码作图:

upset(a, nsets=8,  #数据有8个组
      sets = c("ET","DT","CH","CG","BH","BG","AH","AG"), #横bar的顺序
      nintersects = 50,    #设定显示多少个竖bar
      order.by = c("freq","degree"), #柱形图按照什么排序,freq代表频率,degree代表点连接的数量
      decreasing = c("T","F"), #上面两个选项的升降选项
      keep.order = T,   #横bar的顺序,默认是按照size,如果选T则按字母
      matrix.color = "blue",  #点的颜色
      main.bar.color = "#F8766D", #竖bar颜色,#F8766D是R默认的红色,#00BFC4,#00BA38, #619CFF
      sets.bar.color = rainbow(8), #横bar颜色
      shade.alpha = 0.4, #点图中阴影深浅
      matrix.dot.alpha = 1, #灰点的透明值
      mainbar.y.label = "Shared OTU numbers", #竖bar名
      sets.x.label = "Total OTUs numbers", #横bar名
      point.size = 2.2, #点的大小
      line.size = 0.7, #线的粗细
      mb.ratio = c(0.7, 0.3), #竖bar图和点图的比例
      number.angles = 0,   #竖bar数字角度
      att.pos = "bottom",   #位置
      group.by = "degree", #数据按照“degree”或“set”来排序
      scale.intersections = "identity",  #竖bar度量方法,"identity","log10","log2"
      scale.sets = "identity",  #横bar度量方法,"identity","log10","log2"
      text.scale = 1, #字体大小
      set_size.show = TRUE, #显示横bar数字,但不能显示全,不知道怎么搞
      set_size.numbers_size = 6.5   #横bar数字大小
)

注意:用sets = c(...)修改横bar顺序的时候,要把参数keep.order 设置为“T” ,否则只会按照默认的数量大小进行排列。
得到的结果如下:

结果

如果不嫌麻烦,还可以用下面命令来显示指定组合。

intersections = list(list("AH","AG"), list("BG","BH"), list("CH","CG"), list("DT","ET"))

存在的问题

  1. 横柱子太长的不能显示数字
  2. 暂时无法 随心所欲地排序柱子,例如想共有的放在第一柱,唯一的放在后面几个柱,接着便按照频率进行排序。可能有方法,但暂时没看到,再仔细研究一下。

还有一个貌似很神奇的参数:
set.metadata
由于无法打开GitHub对应的说明,因此不知道怎么用。

上一篇下一篇

猜你喜欢

热点阅读