一、概述
ComplexHeatmap是一个用于创建高度自定义和功能强大的热图可视化图形的R包。它提供了许多功能,例如定制行和列注释,对热图进行排序和聚类,同时支持许多表达式和数据类型。
下面我们将从多个方面进行详细介绍,以便更全面地了解ComplexHeatmap包的功能和用法。
二、创建热图
创建热图是使用ComplexHeatmap的第一步。我们可以使用Heatmap
函数创建一个最基本的热图,代码如下所示:
library("ComplexHeatmap")
mat = matrix(rnorm(120), 10, 12)
Heatmap(mat)
运行代码后,会生成一个简单的热图。然而,我们可以通过添加更多参数来定制我们的热图,将其变得更加美观和易于理解。
三、添加行列注释
在热图中添加行列注释是帮助我们理解和解释数据的重要方式。ComplexHeatmap允许我们添加任意类型的注释,并使用rowAnnotation
和colAnnotation
参数来指定它们。以下是将两个分别由颜色和文字注释的行和一组由斑点和方向注释的列添加到热图中的示例代码:
mat = matrix(rnorm(120), 10, 12)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:12)
row_col = data.frame(color = c(rep("red", 5), rep("blue", 5)),
text = c(paste0("row", 1:5), paste0("row", 6:10)))
col_col = data.frame(dot = rep(1:2, 6), direction = rep(c("up", "down"), 6))
Heatmap(mat, row_title = "Rows", column_title = "Columns",
row_annotation = row_col,
column_annotation = col_col)
运行代码后,我们将看到在行和列标题旁边添加了注释,并在右侧添加了一个注释图例。
四、热图排序和聚类
热图排序和聚类是理解数据模式和关系的重要方式。ComplexHeatmap提供了各种排序和聚类选项来帮助用户更好地理解数据,例如对行和列进行排序和聚类,根据个别行和列将热图拆分为多个小透视表格等。
以下是对行和列进行层次聚类和指定行顺序的示例代码:
mat = matrix(rnorm(120), 10, 12)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:12)
mat_hclust = hclust(dist(mat))
row_order = rownames(mat)[mat_hclust$order]
Heatmap(mat, row_title = "Rows",
clustering_distance_rows = "euclidean", clustering_method_rows = "complete",
row_order = row_order,
show_row_names = FALSE)
运行代码后,我们将看到对行和列进行层次聚类并指定行排序的结果。
五、复杂的注释排布方式
通过使用ComplexHeatmap中提供的各种注释排布方式,我们可以创建具有灵活性和美观度的高度自定义热图。以下是一组垂直和水平显示的注释、自定义大小和位置等代码示例,可以极大地改善热图的可视化效果。
mat = matrix(rnorm(120), 10, 12)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:12)
annotation_row = matrix(rnorm(30), 10, 3)
rownames(annotation_row) = paste0("s", 1:10)
heatmap_legend_param = list(title = "Value",
at = seq(-2, 2, length.out = 5),
labels = c("-2", "-1", "0", "1", "2"))
Heatmap(mat, row_title = "Rows",
column_title = "Columns",
name = "Expression",
right_annotation = annotation_row,
heatmap_legend_param = heatmap_legend_param,
col = colorRamp2(seq(-2, 2, length.out = 100), c("blue", "white", "red")),
top_annotation = anno_block(rep("Title", 5), col = "white", border = "black"),
bottom_annotation = anno_empty(),
left_annotation = anno_block(rep("Group1", 12), border = "black",
text_rot = 45, text_size = 8),
row_dend_reorder = TRUE, row_dend_height = unit(4, "cm"))
运行代码后,我们将看到自定义大小和位置的注释,列标题、行注释标注和注释图例。
六、自定义主题和样式
在ComplexHeatmap中,我们允许用户自定义主题和样式来定制其热图的外观。例如,我们可以更改注释文本的颜色,字体和大小,添加背景颜色和图形,并根据需要更改行列注释的大小和位置。以下是一组自定义主题和样式的示例代码:
mat = matrix(rnorm(120), 10, 12)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:12)
col_fun = colorRamp2(seq(-3, 3, length.out = 100), c("blue", "white", "red"))
annotation_row = matrix(rnorm(30), 10, 3)
rownames(annotation_row) = paste0("s", 1:10)
heatmap_legend_param = list(title = "Value",
at = seq(-2, 2, length.out = 5),
labels = c("-2", "-1", "0", "1", "2"))
Heatmap(mat, row_title = "Rows",
column_title = "Columns",
name = "Expression",
right_annotation = annotation_row,
heatmap_legend_param = heatmap_legend_param, col = col_fun) +
theme(title = "My heatmap",
show_names = TRUE,
row_title_side = "left", row_title_gp = gpar(fontsize = 16),
col_title_gp = gpar(fontsize = 16),
heatmap_legend_side = "right",
heatmap_legend_gp = gpar(fontsize = 14),
bottom_annotation_legends_gp = gpar(fontsize = 12),
row_names_gp = gpar(fontsize = 12),
column_names_gp = gpar(fontsize = 12),
top_annotation_height = unit(2, "cm"),
top_annotation_layout_height = unit(1.25, "cm"),
bottom_annotation_height = unit(2, "cm")) +
style_annotation(title_gp = gpar(fontsize = 10),
labels_gp = gpar(fontsize = 8),
border = TRUE, border_gp = gpar(col = "darkgray", lwd = 0.5),
annotator = "text",
text_gp = gpar(fontsize = 6)) +
style_column(column_title_gp = gpar(fontsize = 16),
column_names_gp = gpar(fontsize = 12),
column_title_side = "top",
column_title_rot = 45)
运行代码后,我们将看到对注释和标题的更改、列标题的旋转和字体增大,并在下方添加自定义注释。这增加了我们的热图可视化的美观性和易读性。
七、结语
ComplexHeatmap是一个功能强大的R包,提供了各种热图可视化选项。本文从不同方面介绍了ComplexHeatmap的功能和用法,从基本热图到注释和排版,以及更高级的主题和样式设计等。熟练掌握ComplexHeatmap对于数据分析和可视化的工作来说是必不可少的。