一文详解如何用 R 语言绘制热图 | 您所在的位置:网站首页 › r语言热图颜色设置 › 一文详解如何用 R 语言绘制热图 |
AI 研习社按:作为目前最常见的一种可视化手段,热图因其丰富的色彩变化和生动饱满的信息表达被广泛应用于各种大数据分析场景。同时,专用于大数据统计分析、绘图和可视化等场景的 R 语言,在可视化方面也提供了一系列功能强大、覆盖全面的函数库和工具包。 因此,对从业者而言,用 R 语言绘制热图就成了一项最通用的必备技能。本文将以 R 语言为基础,详细介绍热图绘制中遇到的各种问题和注意事项。原文作者 taoyan,原载于作者个人博客,AI 研习社获授权。 简介本文将绘制静态与交互式热图,需要使用到以下R包和函数: ● heatmap():用于绘制简单热图的函数 ● heatmap.2():绘制增强热图的函数 ● d3heatmap:用于绘制交互式热图的R包 ● ComplexHeatmap:用于绘制、注释和排列复杂热图的R&bioconductor包(非常适用于基因组数据分析) 数据准备使用R内置数据集 mtcars df % as.dendrogram %>% set("branches_k_color", k = 3) %>% set("branches_lwd", 1.2) %>% ladderize# Order for columns# We must transpose the data Colv % scale %>% t %>% dist %>% hclust %>% as.dendrogram %>% set("branches_k_color", k = 2, value = c("orange", "blue")) %>% set("branches_lwd", 1.2) %>% ladderize #增强heatmap()函数 heatmap(df, Rowv = Rowv, Colv = Colv, scale = "none") ![]() #增强heatmap.2()函数 heatmap.2(df, scale = "none", col = bluered(100), Rowv = Rowv, Colv = Colv, trace = "none", density.info = "none") ![]() #增强交互式绘图函数 d2heatmap()d3heatmap(scale(mtcars), colors = "RdBu", Rowv = Rowv, Colv = Colv) 绘制复杂热图ComplexHeatmap 包是 bioconductor 包,用于绘制复杂热图,它提供了一个灵活的解决方案来安排和注释多个热图。它还允许可视化来自不同来源的不同数据之间的关联热图。可通过以下代码安装: if (!require("devtools")) install.packages("devtools") devtools::install_github("jokergoo/ComplexHeatmap") ComplexHeatmap 包的主要功能函数是 Heatmap(),格式为:Heatmap(matrix, col, name) ● matrix:矩阵 ● col:颜色向量(离散色彩映射)或颜色映射函数(如果矩阵是连续数) ● name:热图名称 library(ComplexHeatmap) Heatmap(df, name = "mtcars") ![]() #自设置颜色 library(circlize) Heatmap(df, name = "mtcars", col = colorRamp2(c(-2, 0, 2), c("green", "white", "red"))) 使用调色板Heatmap(df, name = "mtcars",col = colorRamp2(c(-2, 0, 2), brewer.pal(n=3, name="RdBu"))) ![]() #自定义颜色 mycol qx[1] & x < qx[2] & y > qy[1] & y < qy[2] x = x[l] y = y[l] sqrt(sum((x - y)^2))} # Heatmap Heatmap(df, name = "mtcars", clustering_distance_rows = robust_dist, clustering_distance_columns = robust_dist, col = colorRamp2(c(-2, 0, 2), c("purple", "white", "orange"))) ![]() 参数clustering_method_rows和clustering_method_columns可用于指定进行层次聚类的方法。允许的值是hclust()函数支持的值,包括“ward.D”,“ward.D2”,“single”,“complete”,“average”。 Heatmap(df, name = "mtcars", clustering_method_rows = "ward.D", clustering_method_columns = "ward.D") ![]() 有很多方法来拆分热图。一个解决方案是应用k-means使用参数km。 在执行k-means时使用set.seed()函数很重要,这样可以在稍后精确地再现结果 set.seed(1122) # split into 2 groupsHeatmap(df, name = "mtcars", col = mycol, k = 2) ![]() # split by a vector specifying row classes, 有点类似于ggplot2里的分面 Heatmap(df, name = "mtcars", col = mycol, split = mtcars$cyl ) ![]() #split也可以是一个数据框,其中不同级别的组合拆分热图的行。 # Split by combining multiple variables Heatmap(df, name ="mtcars", col = mycol, split = data.frame(cyl = mtcars$cyl, am = mtcars$am)) ![]() # Combine km and split Heatmap(df, name ="mtcars", col = mycol, km = 2, split = mtcars$cyl) ![]() #也可以自定义分割 library("cluster") set.seed(1122) pa = pam(df, k = 3)Heatmap(df, name = "mtcars", col = mycol, split = paste0("pam", pa$clustering)) ![]() 还可以将用户定义的树形图和分割相结合。在这种情况下,split可以指定为单个数字: row_dend = hclust(dist(df)) # row clusterin grow_dend = color_branches(row_dend, k = 4) Heatmap(df, name = "mtcars", col = mycol, cluster_rows = row_dend, split = 2) ![]() 利用HeatmapAnnotation()对行或列注释。格式为: HeatmapAnnotation(df, name, col, show_legend) ● df:带有列名的data.frame ● name:热图标注的名称 ● col:映射到df中列的颜色列表 # Transposedf |
CopyRight 2018-2019 实验室设备网 版权所有 |