其他
韦恩图进阶!upset plot 02
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)
)
)
除此之外,还可以配合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"
)
OK,以上就是queries的常见用法!真的是非常强大!简直和和韦恩图不是一个量级的。
以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发!
欢迎在评论区留言或直接添加我的微信!
欢迎关注公众号:医学和生信笔记
“医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
往期回顾
长宽数据转换的特殊情况
长数据变为宽数据的7种情况!
宽数据变为长数据的5种情况!
使用lubridate处理日期时间