你知道韦恩图管谁叫大哥不?
2020-09-24 本文已影响0人
小洁忘了怎么分身
临近国庆节啦,花花9月19号上完了9月的线上课,飞回自己家里当废物啦(不要问我为什么不带豆豆,回家当废物怎么能带豆豆呢,带了豆豆还怎么当废物呢)何况豆豆是一个要按时按点上班的人,不像我,时间自由,地点自由,只要完成了工作任务,老板不管我在哪儿~所以只要我胆子大,天天都放假,不建议大家轻易尝试,因为有的公司旷工三天就要开除啦!(在危险的边缘疯狂试探) 言归正传!upsetplot是进阶版的韦恩图,用于展示多个向量间交集的数量。仔细看一下图,会看懂的。
1.准备R包和数据
library(UpSetR)
x = paste0("gene",1:600)
g = list(g1 = sample(x,450),
g2 = sample(x,400),
g3 = sample(x,430),
g4 = sample(x,410),
g5 = sample(x,200))
lapply(g,head,3)
## $g1
## [1] "gene457" "gene441" "gene409"
##
## $g2
## [1] "gene94" "gene321" "gene313"
##
## $g3
## [1] "gene382" "gene178" "gene576"
##
## $g4
## [1] "gene245" "gene69" "gene535"
##
## $g5
## [1] "gene403" "gene138" "gene60"
2.极简出图
upset(fromList(g), order.by = "freq")
![](https://img.haomeiwen.com/i9475888/85c47c160722b836.png)
3.标注出重点关注对象
函数设计的可读性有点……嗯。下面让我们荡起双桨,把所有五个向量的交集那一列标出来。
upset(fromList(g), order.by = "freq",
queries = list(list(query = intersects,
params = list("g1","g2","g3","g4","g5"),
color = "darkred",
active = T)))
![](https://img.haomeiwen.com/i9475888/d5611f8fd5ac03e0.png)
可以标出任意想标的列,几列都可
upset(fromList(g), order.by = "freq",
queries = list(list(query = intersects,
params = list("g2","g3"),
color = "purple",
active = T),
list(query = intersects,
params = list("g1","g3","g5"),
color = "darkred",
active = T)))
![](https://img.haomeiwen.com/i9475888/a799a80a73f5cbf3.png)
4.保持原来的分组顺序
默认按照每个集合数据量大小来排序。我觉得不是很顺眼。可以用sets参数指定顺序,但我发现顺序默认从下往上。也就是说你想要从上向下依次是g1~g5,就必须写成:
rev(names(g))
## [1] "g5" "g4" "g3" "g2" "g1"
upset(fromList(g),
order.by = "freq",
sets = rev(names(g)),
keep.order = T,
queries = list(list(query = intersects,
params = list("g2","g3"),
color = "purple",
active = T),
list(query = intersects,
params = list("g1","g3","g5"),
color = "darkred",
active = T)))
![](https://img.haomeiwen.com/i9475888/ae31e936793244a2.png)