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"))
存在的问题
- 横柱子太长的不能显示数字
- 暂时无法 随心所欲地排序柱子,例如想共有的放在第一柱,唯一的放在后面几个柱,接着便按照频率进行排序。可能有方法,但暂时没看到,再仔细研究一下。
还有一个貌似很神奇的参数:
set.metadata
由于无法打开GitHub对应的说明,因此不知道怎么用。
网友评论