查看原文
其他

韦恩图进阶!upset plot 02

阿越就是我 医学和生信笔记 2023-06-15
关注公众号,发送R语言Python,获取学习资料!

     Try to learn everything about something! 


书接上回!

今天继续学习upsetR包的queries参数的用法!

  • 构造数据

  • queries参数

构造数据

为了方便演示,下面新建一个数据框(data.frame)形式的数据集,这个数据框是一个0-1矩阵的形式,0代表没有,1代表有。

但是为了方便大家学习,我将从一个列表格式(因为画韦恩图用列表格式比较多)进行变换,变为一个0-1矩阵形式。

library(tidyr)
library(dplyr)
## 
## 载入程辑包:'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

# 构造一个列表,每个元素长度相等
df <- list(
  a = sample(1:500,400),
  b = sample(1:500,400),
  c = sample(1:500,400),
  d = sample(1:500,400),
  e = sample(1:500,400),
  f = sample(1:500,400),
  g = sample(1:500,400)
)

# 变为0-1矩阵,你如果对下面这段代码感到疑惑,请查看我前面发的关于长宽数据转换的推文!
df <- df %>% bind_cols() %>% 
  pivot_longer(cols = 1:7) %>% 
  mutate(aa = 1) %>% 
  pivot_wider(names_from = name,values_from = aa,values_fill = 0) %>% 
  mutate(col1 = sample(1995:2022,500,replace = T),
         col2 = sample(1000:10000,500),
         group = sample(LETTERS,500,replace = T),
         .before = 1
         )

glimpse(df)
## Rows: 500
## Columns: 11
## $ col1  <int> 2010, 2015, 2018, 2002, 2008, 2016, 2009, 2017, 1997, 2006, 2022~
## $ col2  <int> 4696, 5434, 6239, 8756, 7913, 4093, 6060, 2778, 7422, 7509, 5172~
## $ group <chr> "V", "F", "C", "T", "J", "L", "O", "N", "R", "P", "G", "A", "O",~
## $ value <int> 497, 1, 250, 404, 146, 290, 179, 72, 43, 153, 450, 185, 480, 85,~
## $ a     <dbl> 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1~
## $ b     <dbl> 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1~
## $ c     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1~
## $ d     <dbl> 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1~
## $ e     <dbl> 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1~
## $ f     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1~
## $ g     <dbl> 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1~
df <- as.data.frame(df) # 不能是tibble哦!

注意!!这个数据的前4列都是属性的描述,后面7列才是真正的集合!在画图时会自动识别。

queries参数

昨天简单讲了一下queries参数,了解它基本的作用就是查询特定的数据,今天继续扩展。

  • 可以查询特定交集,此时用intersects
  • 也可以查询符合条件(此时就用到了属性的那几列)的某些元素,此时用elements
upset(df,order.by = "freq",main.bar.color = "skyblue",sets.bar.color = "grey70",nintersects=20,
      
      ## 添加query
      queries = list(
        # 查询特定交集
        list(query = intersects, params  = list("g","f","e"),color = "orange",active = T),
        list(query = intersects, params  = list("d","f","c"),color = "red",active = T),
        
        # 查询元素,选择col1这一列为2010~2020的元素
        list(query = elements, params = list("col1",2010:2020),
             color = "tomato",active = T
        )
      )
plot of chunk unnamed-chunk-7

除此之外,还可以配合expression参数,在查询到的结果中继续限定条件:

upset(df,order.by = "freq",main.bar.color = "skyblue",sets.bar.color = "grey70",nintersects=20,
      
      ## 添加query
      queries = list(
        # 查询特定交集
        list(query = intersects, params  = list("g","f","e"),color = "orange",active = T,query.name="query1"),
        list(query = intersects, params  = list("d","f","c"),color = "red",active = T,query.name="hah"),
        
        # 查询元素,选择col1这一列为2010~2020的元素
        list(query = elements, params = list("col1",2010:2020),
             color = "tomato",active = T,query.name="elements"
        ),
      
      # 在queries的基础上,再添加条件
      expression = "col2 > 5000 & value > 200",
      
      # 添加图例
      query.legend = "top"
      )
plot of chunk unnamed-chunk-8

OK,以上就是queries的常见用法!真的是非常强大!简直和和韦恩图不是一个量级的。


以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发

欢迎在评论区留言或直接添加我的微信!


欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!


往期回顾

长宽数据转换的特殊情况


长数据变为宽数据的7种情况!


数据变为长数据的5种情况!


使用lubridate处理日期时间


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存