我们联系venn图的时候提到过超过5维的数据可能用upset图比较好,前面VennDetail也提到过它可以显示upset的形式,其实是这个包的函数调用了upset函数。
今天我们练习怎么利用upset函数生成自己想要的图。
还是用我们前面的测试数据:
library(UpSetR)
set1 <- paste(rep("test_" , 200) , sample(c(1:10000) , 200 , replace=F) , sep="")
set2 <- paste(rep("test_" , 500) , sample(c(1:10000) , 500 , replace=F) , sep="")
set3 <- paste(rep("test_" , 300) , sample(c(1:10000) , 300 , replace=F) , sep="")
set4 <- paste(rep("test_" , 500) , sample(c(1:10000) , 500 , replace=F) , sep="")
set5 <- paste(rep("test_" , 300) , sample(c(1:10000) , 300 , replace=F) , sep="")
input <- list("Set1"=set1,"Set2"=set2,"Set3"=set3,"Set4"=set4,"Set5"=set5)
先试下最简单的upset命令:
upset(fromList(input))

下面我们进行细节美化。
修改排序、坐标系、标签等参数
upset(fromList(input),
order.by = "freq", # 主坐标系排序
number.angles = 0, # 柱标倾角
point.size = 3, # 点大小
line.size = 1, # 线粗细
mainbar.y.label = "Count of Intersection", # y 标题
sets.x.label = "Datasets Size", # x 标题
text.scale = c(2.5, 1.5, 2.5, 1.5, 2, 2),
# y 标题 大小
# y 刻度标签 大小
# dataset size 标题 大小
# dataset size 刻度标签 大小
# dataset size 分类标签 大小
# 柱数字 大小
)

下面调整柱子的排序方式:
upset(fromList(input),
order.by = "freq", # 主坐标系排序
number.angles = 0, # 柱标倾角
point.size = 3, # 点大小
line.size = 1, # 线粗细
mainbar.y.label = "Count of Intersection", # y 标题
sets.x.label = "Datasets Size", # x 标题
text.scale = c(2.5, 1.5, 2.5, 1.5, 2, 2),
# y 标题 大小
# y 刻度标签 大小
# dataset size 标题 大小
# dataset size 刻度标签 大小
# dataset size 分类标签 大小
# 柱数字 大小
group.by = "sets", # 按dataset排序
)

也可以控制条形图和下方点图占的比例,通过 mb.ratio 来实现。
upset(fromList(input),
order.by = "freq", # 主坐标系排序
number.angles = 0, # 柱标倾角
point.size = 3, # 点大小
line.size = 1, # 线粗细
mainbar.y.label = "Count of Intersection", # y 标题
sets.x.label = "Datasets Size", # x 标题
mb.ratio = c(0.65, 0.35), #控制上方条形图以及下方点图的比例
text.scale = c(2.5, 1.5, 2.5, 1.5, 2, 2),
# y 标题 大小
# y 刻度标签 大小
# dataset size 标题 大小
# dataset size 刻度标签 大小
# dataset size 分类标签 大小
# 柱数字 大小
#group.by = "sets", # 按dataset排序
)
下面我们调整颜色,主要通过queries参数来实现。
queries参数分为四个部分:query, param, color, active;
query: 指定哪个query,UpSetR有内置,也可以自定义;
param: list, query作用于哪个交集
color:每个query都是一个list,里面可以设置颜色,没设置的话将调用包里默认的调色板;
active:被指定的条形图:TRUE显示颜色,FALSE在条形图顶端显示三角形;
下面试下调整看看。我们在queries里面定义了三组自定义色,分别面向单一,2个和3个变量。
library(RColorBrewer)
myCol <- brewer.pal(5, "Pastel2")
upset(fromList(input),
order.by = "freq", # 主坐标系排序
number.angles = 0, # 柱标倾角
point.size = 3, # 点大小
line.size = 1, # 线粗细
mainbar.y.label = "Count of Intersection", # y 标题
sets.x.label = "Datasets Size", # x 标题
mb.ratio = c(0.65, 0.35), #控制上方条形图以及下方点图的比例
text.scale = c(2.5, 1.5, 2.5, 1.5, 2, 2),
#group.by = "sets", # 按dataset排序
main.bar.color = "purple", #柱子的颜色
sets.bar.color=myCol, #数据集柱子的颜色
queries = list(list(query = intersects,
params = list("Set2"),
color = "red",
active = F,
query.name = "Set2"),
list(query = intersects, params = list("Set3", "Set4"), active = T,color="cyan",query.name = "Set3_Set4"),
list(query = intersects, params = list("Set1", "Set3", "Set4"), color = "orange", active = T,query.name="three sets")),
query.legend = "top"
)
当然,色系大家可以自己的喜好调整,我是随意挑了一个颜色做演示。

当然upset还可以通过attribute.plots参数添加一些如柱状图,散点图等。但是这个功能,其实你多画几个自己拼起来也是OK的。
网友评论