读图
可以看到,这个实验有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()
出图:
Tips:因为图为ggplot下画的 所以可自行扩展需要的内容。