复杂热图绘制秘籍:用ComplexHeatmap创造数据的视觉奇迹!






复杂热图绘制秘籍:用ComplexHeatmap创造数据的视觉奇迹!

小图  生信果  2024-01-09 19:00:57

hello,相信大家已经对Heatmap这个R包轻车熟路啦,那么你知道如何在热图中展示不同样本的相对丰度嘛?今天小果就来教大家如何用ComplexHeatmap包绘制复杂热图,感兴趣的话就和小果一起看下去吧!!

Heatmap和ComplexHeatmap的区别

在使用之前,小果先来带大家区分一下这两个R包吧!

·功能和灵活性:

Heatmap是R语言中基本的绘制热图的函数,它可以用于简单的热图绘制,但功能相对较为有限。它主要用于展示数值矩阵的颜色编码,不支持添加分组注释、行列聚类等高级功能。ComplexHeatmap是一个由Zuguang Gu开发的R包,它在Heatmap基础上提供了更多高级功能和灵活性。通过 ComplexHeatmap,你可以自定义热图的各个方面,如添加分组注释、自定义颜色映射、行列聚类、调整注释等。它还提供了一系列的辅助函数和参数,使得用户可以进行更复杂、更精细的热图绘制。    

·代码复杂度:

由于ComplexHeatmap提供了更多的功能和选项,其使用相对复杂一些,需要更多的代码来完成定制化的热图绘制。Heatmap则相对简单,适用于简单的热图需求或快速实验。

·社区支持:

ComplexHeatmap作为一个专门的R包,拥有更大的社区支持和更广泛的用户群体。你可以在其官方文档、GitHub上找到大量的示例、文档和交流资源,以便在使用时获取帮助和解决问题。相比之下,Heatmap作为R语言的基本函数,其文档和示例相对较少。

综上所述,ComplexHeatmap相对于Heatmap提供了更多的高级功能和灵活性,但也更复杂一些。如果你需要进行复杂的热图绘制,并添加分组注释、调整颜色映射等高级功能,推荐使用ComplexHeatmap。如果你只需要简单的热图展示,或者对R语言不太熟悉,可以使用Heatmap函数完成基本的热图绘制哦。

好啦,现在你了解二者的区别了嘛?那接下来进入我们今天的正题!

ComplexHeatmap绘制复杂热图    

·安装与导入R包:

首先,大家可以通过以下代码安装R包哦:

         
if (!require(“BiocManager”))          
  install.packages(‘BiocManager’)          
if (!require(“ComplexHeatmap”))          
  BiocManager::install(‘ComplexHeatmap’)          
library(ComplexHeatmap)

·准备数据

1.为了绘制热图,我们需要准备相对丰度矩阵及其对应的分组数据表格。小果已经帮你们准备好这两个文件啦,在此将它们命名为”test.csv”和”group.csv”。确保这两个文件要与R脚本位于同一目录下哦:

df <- read.csv(“test.csv”, header = T)          
group_df <- read.csv(“group.csv”, header = F)

·数据处理

在开始绘制热图之前,我们需要对数据进行一些处理。首先,我们将按”Class”和”Family”列对矩阵的所有行进行排序。

df <- df[order(df$Class, df$Family), ]

然后,我们将从数据框中提取相对丰度数据,并将其转换为矩阵格式:

         
mat <- df[-c(1, 2, 3)]          
mat <- as.matrix(mat)          
row.names(mat) <- df[, 3]
   

最后,我们获得 class-family-species 对应表格:

         
df_annotation <- df[c(1, 2, 3)]

·绘制一个简单的热图

为了与后面的热图做比较,我们先来绘制一个简单的热图:

ht <- Heatmap(mat)

绘制的热图如下所示:   

然后,我们可以调整参数来简单的美化一下热图。例如,我们可以设置不按行聚类、不展示列名,并设置

热图图例的名称和颜色:

ht <- Heatmap(mat,          

             cluster_rows = F,          

             show_column_names = F,          

             heatmap_legend_param = list(title = “Log2 relative abundance”),          

             col = c(“#FFFFFF”, “#D32F2F”))    

·添加行分组注释和列分组注释

接下来,我们可以生成列分组注释。为此,我们需要设置列分组的颜色和图例顺序:

top_col <- c(“Normal”=”#2196F3”, “Obese”=”#FFEB3B”, “NASH”=”#E91E63”)          
top_anno <- HeatmapAnnotation(State = group_df[, 2],          

                             col = list(State = top_col),          

                             annotation_legend_param = list(State = list(at=c(“Normal”, “Obese”, “NASH”))))    

同样地,我们也可以生成行分组注释。设置行分组的颜色和图例顺序:

left_col <- c(“Bacteroidaceae”=”#1976D2”, “Marinifilaceae”=”#2196F3”, “Porphyromonadaceae”=”#03A9F4”, “Rikenellaceae”=”#00BCD4”, “Tannerellaceae”=”#B3E5FC”,          

             “Campylobacteraceae”=”#F8BBD0”,          

             “Family XI”=”#D32F2F”, “Family XIII”=”#F44336”, “Lachnospiraceae”=”#E64A19”, “Peptostreptococcaceae”=”#FF5722”, “Ruminococcaceae”=”#FFCCBC”,          

             “Enterobacteriaceae”=”#4CAF50”,          

             “Leuconostocaceae”=”#FFEB3B”,          

             “Veillonellaceae”=”#673AB7”)          
         
left_anno <- rowAnnotation(Family = df_annotation[, 2],          

                          show_annotation_name = F,          

                          col = list(Family = left_col),          

                          annotation_legend_param = list(          

                            Family = list(at=c(“Bacteroidaceae”, “Marinifilaceae”,          

                                               “Porphyromonadaceae”, “Rikenellaceae”,          

                                               “Tannerellaceae”, “Campylobacteraceae”,          

                                               “Family XI”, “Family XIII”, “Lachnospiraceae”,          

                                               “Peptostreptococcaceae”, “Ruminococcaceae”,          

                                               “Enterobacteriaceae”, “Leuconostocaceae”,          

                                               “Veillonellaceae”))))

最后,我们可以将之前的设置与热图对象合并,并绘制出最终的热图:

ht <- Heatmap(mat,          

             cluster_rows = F,          

             show_column_names = F,          

             heatmap_legend_param = list(title = “Log2 relative abundance”),          

             col = c(“#FFFFFF”, “#D32F2F”),          

             top_annotation = top_anno,          

             left_annotation = left_anno)

优化后的热图展示如下:   

你以为这就是最终结果了嘛?No!!我们还可以进一步细化:

·给Class单独添加图例

如果需要单独绘制一个图例,可以按照以下步骤进行操作:

class <- unique(df_annotation$Class)

然后,我们创建一个 Legend 对象,并设置标签、标题和图例颜色:   

lgd <- Legend(labels = class, title = “Class”,          

             legend_gp = gpar(fill = c(“#1976D2”, “#F8BBD0”, “#D32F2F”, “#4CAF50”, “#FFEB3B”, “#673AB7”)))          
pdf(“plot.pdf”, width = 11, height = 10)          
draw(ht, ht_gap = unit(7, “mm”), annotation_legend_list = lgd)          
dev.off()

好啦,让我们来一起看看绘制的最终结果吧!!

怎么样,你学会怎么使用ComplexHeatmap包了嘛?更多学习干活请多多关注小果哦!


往期推荐

1.搭建生信分析流水线,如工厂一样24小时运转Snakemake——进阶命令
2.比blast还优秀的序列比对工具?HMMER来了
3.对单细胞分析毫无头绪?让popsicleR领你入门
4.小果带你绘制ROC曲线评估生存预测能力
5.软件包安装、打怪快又好,1024G存储的生信服务器;还有比这更省钱的嘛!!!