R实战 | 利用upset展示实验设计分组(ggupset)

R实战 | 利用upset展示实验设计分组(ggupset)

今天刷GitHub看到一个挺有意思的图,给大家简单的介绍一下。

项目地址:GitHub - const-ae/ggupset: Combination matrix axis for 'ggplot2' to create 'UpSet' plots

读图

71025050a4d9ac435653d6d17a6d236d.png

可以看到,这个实验有3个处理 KO(敲除)WT(野生型)Drug(给药)。并且分别观察试验后 8、12、24h的反应。这么多的分组如何进行一个直观的展示呢?作者给了我们一个值得借鉴的思路。利用upset图的交集特性可以直观的反应分组情况,例如第一列即为敲除8h后的反应,最后一列即为不敲除并且给药48h后的反应。

绘制

# 安装并加载包
install.packages("ggupset")
library(ggupset)
library(ggplot2)
library(tidyverse)
# 导入并查看数据
data(df_complex_conditions)
head(df_complex_conditions)
# 数据为4列。是否敲除、是否给药、观测时间、反应
> head(df_complex_conditions)
# A tibble: 6 x 4
  KO    DrugA Timepoint response
  <lgl> <chr>     <dbl>    <dbl>
1 TRUE  Yes           8     84.3
2 TRUE  Yes           8    105. 
3 TRUE  Yes           8     79.1
4 TRUE  Yes           8    140. 
5 TRUE  Yes           8    108. 
6 TRUE  Yes           8     79.5
# 新增一列为分组标签
df <- df_complex_conditions %>%
      mutate(Label = pmap(list(KO, DrugA, Timepoint), function(KO, DrugA, Timepoint){
       c(if(KO) "KO" else "WT", if(DrugA == "Yes") "Drug", paste0(Timepoint, "h"))
      }))
# 绘制
ggplot(df,aes(x=Label, y=response)) +
  geom_boxplot() + #箱线图
  geom_jitter(aes(color=KO), width=0.1) + #散点
  geom_smooth(method = "lm", aes(group = paste0(KO, "-", DrugA))) + #分组拟合曲线
  scale_x_upset(order_by = "degree", #upset图
                sets = c("KO", "WT", "Drug", "8h", "24h", "48h"),
                position="top", name = "") +
  theme_combmatrix(combmatrix.label.text = element_text(size=12), #upset图主题
                   combmatrix.label.extra_spacing = 5)+
  theme_bw()

出图:

ad6b89d7fe58f70a15b85b188a657656.png

Tips:因为图为ggplot下画的 所以可自行扩展需要的内容。

后记

关于更详细的代码讲解、作者的原代码的一些细节以及我修改的地方会在之后的视频教程中详细讲到,有兴趣的可以关注我的B站【木舟笔记】

往期内容

  1. 跟着Nature学作图 | 配对哑铃图+分组拟合曲线+分类变量热图

  2. (免费教程+代码领取)|跟着Cell学作图系列合集

  3. 跟着Nat Commun学作图 | 1.批量箱线图+散点+差异分析

  4. 跟着Nat Commun学作图 | 2.时间线图

  5. 跟着Nat Commun学作图 | 3.物种丰度堆积柱状图


565ce34a573fec4900b6498e64bb7126.png

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值