R绘图笔记 | 热图绘制
关于绘图,前面介绍了一些:
R绘图笔记 | 多数据系列的箱型图与带抖动散点的多数据系列箱型图
这里介绍热图,热图在生信文章中很常见,几乎都有。
一.读入数据
如果你想获取该数据用于自己练习,下面是获取数据的地址:
https://docs.qq.com/sheet/DV3lUY3NodG5TdWFz
数据格式是这样的。
数据第A列是病人ID,B列样本信息(Trmor/Normal),其他列是病人的标准化后的基因表达数据。
你可以保存副本导出,然后自己读入处理成下面这种样式:
library(ComplexHeatmap)
library(circlize)
library(dendextend)
library(pheatmap)
library(RColorBrewer)
data <- read.csv("BioInfoNotesData2.csv",row.names = 1,stringsAsFactors = F)
dim(data)
Type <- data$sample
data <- t(data[,-1])
rownames(data) <- paste0("Gene ",1:20)
head(data)[,1:4]
二.绘图
1.pheatmap包绘图
其实,关于这个包绘制热图,很简单,官方的案例,你运行一遍就知道是什么意思了。
上面的数据,直接作为参数就可以直接出图了。
pheatmap(data)
然后我们发现,很丑,我们知道列名是病人的ID,可以不显示,一定有参数设置不显示列名。
pheatmap(mat, color = colorRampPalette(rev(brewer.pal(n = 7, name =
"RdYlBu")))(100), kmeans_k = NA, breaks = NA, border_color = "grey60",
cellwidth = NA, cellheight = NA, scale = "none", cluster_rows = TRUE,
cluster_cols = TRUE, clustering_distance_rows = "euclidean",
clustering_distance_cols = "euclidean", clustering_method = "complete",
clustering_callback = identity2, cutree_rows = NA, cutree_cols = NA,
treeheight_row = ifelse((class(cluster_rows) == "hclust") || cluster_rows,
50, 0), treeheight_col = ifelse((class(cluster_cols) == "hclust") ||
cluster_cols, 50, 0), legend = TRUE, legend_breaks = NA,
legend_labels = NA, annotation_row = NA, annotation_col = NA,
annotation = NA, annotation_colors = NA, annotation_legend = TRUE,
annotation_names_row = TRUE, annotation_names_col = TRUE,
drop_levels = TRUE, show_rownames = T, show_colnames = T, main = NA,
fontsize = 10, fontsize_row = fontsize, fontsize_col = fontsize,
angle_col = c("270", "0", "45", "90", "315"), display_numbers = F,
number_format = "%.2f", number_color = "grey30", fontsize_number = 0.8
* fontsize, gaps_row = NULL, gaps_col = NULL, labels_row = NULL,
labels_col = NULL, filename = NA, width = NA, height = NA,
silent = FALSE, na_col = "#DDDDDD", ...)
show_rownames = T, show_colnames = T都是默认显示的,可以改为FALSE。
pheatmap(data,show_colnames = F)
另外,我们还可以看出,基因的排序不是按照我们数据框的顺序排的,它给我们聚类排序了。cluster_rows = TRUE, cluster_cols = TRUE默认就是对列和行聚类,你可以设置不聚类。自己去试试。clustering_method指定聚类方法。kmeans_k参数用来指定聚类个数。 cellwidth = NA, cellheight = NA,用来指定每个小格子的宽和高。color指定颜色。display_numbers指定是否显示数值,fontsize_number指定字体大小,number_format参数可以设置数值格式,比如保留几位小数。legend指定是否显示图例。main指定图的标题,fontsize指定字体大小。
pheatmap(data,show_colnames = F,cluster_rows = F,
color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
通常情况下,我们还是要有分组注释的。也就是为行和列生成注释,说白了就是分组信息,用annotation_col与annotation_row 参数设置,annotation_legend就用来指定注释信息。
设置列注释:
annotation_col = data.frame(Type = factor(Type))
rownames(annotation_col) = colnames(data)
head(annotation_col)
设置行注释:
annotation_row = data.frame(GeneClass = factor(rep(c("Path1", "Path2", "Path3"), c(10, 4, 6))))
rownames(annotation_row) = rownames(data)
head(annotation_row)
pheatmap(data, annotation_col = annotation_col,annotation_row=annotation_row,
show_colnames = F)
2.ComplexHeatmap包Heatmap函数绘图
这个函数绘图,数据量太大的话,不适合,所以前面的数据取一部分样本进行绘制就行。
data2 <- data[,c(1:20,(ncol(data)-19):ncol(data))]
df<-scale(data2) #使用scale方法来对数据进行标准化,以消除量纲对数据结构的影响
row_dend = hclust(dist(df)) # 根据行对数据进行系统性聚类
col_dend = hclust(dist(t(df))) # 根据列对数据进行系统性聚类
mycol <-rev(brewer.pal(n = 7, name = "RdYlBu")) #构造颜色映射方案
Heatmap(df, col = mycol,name = "",rect_gp = gpar(col = "black"),
show_column_names=F,
column_dend_height = unit(4, "cm"), #设定列聚类显示部分的高度
row_dend_width = unit(4, "cm"), #设定行聚类显示部分的宽度
cluster_rows = color_branches(row_dend, k = 4), #设定行聚类成4类
cluster_columns = color_branches(col_dend, k = 2)) #设定列聚类成2类
参数和前面的pheatmap函数差不多,看名字几乎就知道什么意思。
最后,我自己还是喜欢pheatmap函数。
pheatmap(scale(data2), annotation_col = annotation_col,annotation_row=annotation_row,
show_colnames = F,cluster_cols = F,annotation_names_row = F,cellwidth = 15, cellheight = 12,
color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
参考资料:
R语言数据可视化之美,张杰/著
pheatmap帮助文档