【R画图学习7】upset图

2022-10-20  本文已影响0人  jjjscuedu

我们联系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的。

上一篇 下一篇

猜你喜欢

热点阅读