cover_image

🤩 ComplexHeatmap | 颜狗写的高颜值热图代码(附局部放大效果!)

Woo oops 生信漫卷 2022年11月03日 00:34

1写在前面

最近在画热图(heatmap)时,除了遇到画热图时导入的基因过多,基因名就会重叠在一起的问题以外,另一个问题就是:👇
希望可以做到热图单个或多个基因表达的比较,同时有放大的效果,突出基因在两组间的表达差异,再以boxplot的形式展示出来,找遍全网也没有找到解决方案,干脆自己造轮子吧。😘

可能有小伙伴会说,画完两个图,再在AI里拼上就可以啦,问题是这样不容易对应到基因热图中的位置了。😭

这里给大家提供一下解决方案吧,全程代码操作,非常简单,只需要提供一个表达矩阵,一个分组文件即可,效果图如下,颜值还是挺高的。🤨

📍
图片

2用到的包

rm(list = ls())
library(tidyverse)
library(circlize)
library(ComplexHeatmap)
library(reshape2)
library(ggsci)
library(ggpubr)
#devtools::install_github('erocoar/ggparl')
library(ggparl)

3示例数据

这里我们随机生成一个矩阵200行,20列。👀

expr <-  matrix(rnorm(4000), nrow = 200)
rownames(expr) <- paste0("gene", 1:200)
colnames(expr) <- paste0("sample",1:20)
head(expr)
图片

4分组数据

我们读入一下事先写好的分组文件,这里我将20个样本分成了两组,即ControlDisease组。

group <- read.csv("./group.csv")
group
图片

5数据预处理

这里我们先做一下数据的预处理,如归一化因子转换等,如果你的数据已经做过了,就不用做了。

expr_scaled <- t(scale(t(expr)))

group$Group <- factor(group$Group,unique(group$Group))
group$Group
图片

6提取目的基因位置🔍

这里我们需要找到这些基因原始矩阵的位置,大家把自己想要标记的基因传递给gene就行了,非常简单。😘
这里我们标记一下gene10gene100。🔍

gene <- c("gene10", "gene100") # 改成你需要标记的基因即可。

genemark <- which(rownames(expr_scaled) %in% gene)
genemark
图片

7顶部注释

7.1 整理列注释文件

这里提供一个样本聚类列注释,如果你不需要可以跳过这一段。🥳

class <-  anno_block(
gp = gpar(fill = c("#E64B35E5", "#4DBBD5E5", "#00A087E5", "#3C5488E5"),
col="white"),

height = unit(5, "mm"),

labels = c("Cluster A", "Cluster B", "Cluster C","Cluster D"),

labels_gp = gpar(col = "white", fontsize = 8,fontface="bold")
)

## ========
ha = HeatmapAnnotation(Group = group$Group,
col = list(Group = c("Control" = "#F39B7FB2",
"Disease" = "#91D1C2B2")),
clusters = class
)

7.2 可视化

Heatmap(expr_scaled, 
name = "Expr",
top_annotation = ha,
column_split= 4, # 聚类个数,可以根据自己的需要修改。
column_title = NULL,
show_row_names = F,
show_row_dend = F)
图片

8自定义函数画放大boxplot

这里也是本次可视化最大的难点,需要画一个基因放大后,两组比较的boxplot,还需要添加统计值。🤒
这里我写了一个自定义函数,大家几乎不需要更改,如果颜色不满意,或需要修改统计方法,可以见注释进行具体修改。🌟

1元 = 10微信豆
微信扫一扫付费阅读本文

可试读18%

1元 = 10微信豆
微信扫一扫付费阅读本文
Heatmap · 目录
上一篇🤥 ComplexHeatmap | 你的热图注释还挤在一起看不清吗!?
继续滑动看下一个
生信漫卷
向上滑动看下一个