绘制热图的函数。
1、参数说明
mat # 要绘制的值的数字矩阵
color # 热图中要使用的颜色向量
kmeans_k # 如果想在绘制热图前聚类行,则需要创建的kmeans cluster的数量,如果NA,则不聚合
breaks # 一个数字序列,覆盖了mat中值的范围,比颜色向量多一个元素。用于将值映射到颜色。如果需要将某些值映射到某些颜色,则很有用。如果value为NA,则会自动计算break,当break不覆盖值得范围时,任何大于max(break)的值将获得最大颜色,任何低于min(break)的值将获得最低颜色
border_color # 热图上单元格边框的颜色,如果没有边框,请使用NA
cellwidth # 以点为单位的单个单元格宽度。如果为NA,则值取决于绘图窗口的大小
cellheight # 以点为单位的单个单元格高度。如果左为NA,则值取决于绘图窗口的大小。
scale # 指示值是否应在行方向或列方向居中和缩放,或无的字符。对应的值是"row"\"column"\"none"
cluster_rows # 确定行应该是cluster还是'hclust'对象
cluster_cols # 确定列应该是cluster还是'hclust'对象
clustering_distance_rows # 聚类行中使用的距离度量。可能的值是Pearson相关性的'"correlation"'和dist支持的所有距离,例如'"euclidean"'(欧式)等。如果不是,则假设提供了一个距离矩阵
clustering_distance_cols # 聚类列中使用的距离度量,可能的值与前者相同
clustering_method # 使用的聚类方法。接受与"hclust"相同的值
clustering_callbank # 修改聚类的回调函数。使用两个参数调用:原始hclust对象和用于聚类的矩阵,必须返回一个hclust对象
cutree_rows # 根据分层聚类(使用cutree)将行划分为的cluster的数量,如果未进行行聚类,则忽略
tree_height_row # 行的树的高度,如果这些行是聚集的。默认值50点。
tree_height_col # 列的树高度
legend # 逻辑值,确定是否应该绘制图例
legend_breaks # 图例的断点向量
legend_labels # legend_breaks的标签向量
annotation_row # 指定热图左侧显示的注释的数据框。每行定义特定行的功能。数据和注释中的行使用相应的行名称进行匹配。请注意,配色方案会考虑变量是连续的还是离散的
annotation_col # 同上,但用于列
annotation #
annotation_colors # 用于手动指定annotation_row和annotation_col跟踪颜色的列表。可以仅为某些功能定义颜色。查看示例以获取详细信息。
annotation_legend # 布尔值,显示是否应绘制注释轨道的图例。
annotation_names_row # 显示是否应绘制行注释轨道名称的布尔值。
annotation_names_col # 显示是否应绘制列注释轨道的名称的布尔值。
drop_levels # 逻辑值,确定图例中是否也显示了未使用的level
show_rownames # 逻辑值,指定是否显示行名
show_colnames # 逻辑值,指定是否显示列名
main # plot的标题
fontsize # plot的基本字体大小
fontsize_row # 行名的fontsize,默认为上
fontsize_col # 列名的fontsize,默认为上
angle_col # 列标签的角度,只能从几个预定义选项(0,45,90,270和315)中选择
display_numbers # 逻辑值,数值是否打印到单元格,如果是一个矩阵(与原始矩阵具有相同维度),则显示矩阵内容而不是原始值
numer_format # 单元格中显示的格式字符串(c printf样式),例如"%.2f"显示2位先输入,"%.1e"显示指数表示法
number_color # color of the text
fontsize_number # 单元格中显示的数字的字体大小
gaps_row # 显示将间隙放入热图的位置的行索引向量。仅在行未聚类时使用,参考cutree了解如何将间隙引入聚集行
gaps_col # 与gaps_row相似,但是针对列
labels_row # 用于代替行名的自定义标签
labels_col # 用于代替列名的自定义标签
filename # 文件路径保存图片的位置。文件类型由路径中的扩展名决定:png、pdf、tiff、bmp、jpeg。即使绘图不适合绘图窗口,也会计算文件大小,以便绘图适合其他地方,除非另有指定
width # 用于确定以英寸未单位的输出文件宽度的手动选项
height # 用于确定以英寸为单位的输出文件高度的手动选项
silent # 不绘制绘图(是哦用gtable输出时很有用)
na_col # 指定矩阵中NA单元格的颜色
... # 绘图中使用的文本的图形参数。传递给grid.test的参数,参见gpar
2、Details
该函数还允许使用kmeans聚类聚合行。如果行数太大,R无法再处理它们的层次集群(大约超过1000),这是可取的。与其单独显示所有行,不如提前将行聚集起来,只显示集群中心。集群的数量可以通过参数kmeans_k进行调优。
3、代码演示
3.1 加载所需R包
library(pheatmap)
3.2 创建测试矩阵
# 创建测试矩阵 ####
test <- matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] <- test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10 ,2)] <- test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10 ,2)] <- test[15:20, seq(2, 10, 2)] + 4
colnames(test) < paste('Test', 1:10, sep = '')
rownames(test) <- paste('Gene', 1:20, sep = '')
## 需要行为基因名,列为样本名的矩阵
3.3 画热图
pheatmap(test) # 默认聚类+热图
pheatmap(test, kmeans_k = 2) # 聚类只显示两类,且只展示基因的聚类结果
pheatmap(test, scale = 'row', clustering_distance_rows = 'correlation') # 按行(基因表达量)归一化,
pheatmap(test, color = colorRampPalette(c('navy', 'white', 'firebrick3'))(100)) # 修改表达趋势的颜色,从上到下,后面的数字显示颜色的精细度
pheatmap(test, cluster_rows = F) # 不进行行聚类
pheatmap(test, legend = F) # 不显示右侧表达趋势图例
image.png
3.4 显示单元格内的文本
pheatmap(test, display_numbers = T) # 显示单元格内的文本
pheatmap(test, display_numbers = T, number_format = '\%.1e') # 单元格内文本的表示方法(此处是科学计数法)
pheatmap(test, display_numbers = matrix(ifelse(test > 5, '*',''), nrow(test))) # 填入矩阵,此处表示如果>5,就用*填充,否则留空,填入与格子数相等的矩阵
pheatmap(test, cluster_rows = F, legend_breaks = -1:4, legend_labels = c('0', '1e-4', '1e-3', '1e-2', '1e-1', '1'))
image.png
3.5 修改单元格大小并以正确的大小保存文件
pheatmap(test, cellwidth = 15, cellheight = 12, main = 'Example heatmap') # 修改图片大小,并添加标题
pheatmap(test, cellwidth = 15, cellheight = 12, fontsize = 2, filename = 'test.pdf') # 修改x轴、y轴、右侧图例字体大小,命名文件名
image.png
3.6 为行和列添加注释
annotation_col <- data.frame(
CellType = factor(rep(c('CT1','CT2'),5)),
Time = 1:5
)
rownames(annotation_col) <- paste('Test', 1:10, sep = '')
annotation_row <- data.frame(
GeneClass = factor(rep(c('Path1', 'Path2', 'Path3'), c(10, 4, 6)))
)
rownames(annotation_row) <- paste('Gene', 1:20, sep = '')
# 显示行和颜色注释
pheatmap(test, annotation_col = annotation_col) # 行添加顶部的分组或时间的label标签、右侧分组legend标签(可以是等级变量、也可以细胞类型)
pheatmap(test, annotation_col = annotation_col, annotation_legend = F) # 关掉列标签的右边图例
pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row) # 添加行分组标签,行标签的图例
image.png
3.7 更改文本中的角度
# 更改列中文本的角度
pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row, angle_col = '45') # 修改底部列名的角度
pheatmap(test, annotation_col = annotation_col, angle_col = '0') # 修改底部列名角度为0
image.png
3.8 指定颜色
ann_colors <- list(
Time = c('white', 'firebrick'),
CellType = c(CT1 = '#1B9E77', CT2 = '#D95F02'),
GeneClass = c(Path1 = '#7570B3', Path2 = '#E7298A', Path3 = '#66A61E')
)
pheatmap(test, annotation_col = annotation_col, annotation_colors = ann_colors, main = 'Title') # 修改添加顶部分组的颜色
pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row, annotation_colors = ann_colors) # 修改顶部和侧边分组的颜色
pheatmap(test, annotation_col = annotation_col, annotation_colors = ann_colors[2]) # 只修改部分分组的颜色
image.png
3.9 热图中的分隔
pheatmap(test, annotation_col = annotation_col, cluster_rows = F, gaps_row = c(10, 14)) # 添加空隙用来分割分类
pheatmap(test, annotation_col = annotation_col, cluster_rows = T, gaps_row = c(10, 14), cutree_cols = 2) # 后者将列按照聚类结果分类
image.png
3.10 自定义字符串显示为列名/行名
labels_row = c("", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "Il10", "Il15", "Il1b")
pheatmap(test, annotation_col = annotation_col, labels_row = labels_row) # 根据向量自定义行名
image.png
3.11 从dist矩阵中指定聚类
# 从dist矩阵指定聚类
drows <- dist(test, method = 'minkowski')
dcols <- dist(t(test), method = 'minkowski')
pheatmap(test, clustering_distance_rows = drows, clustering_distance_cols = dcols)
image.png
3.12 修改cluster的顺序
# 修改cluster的顺序
callback = function(hc, mat){
sv = svd(t(mat))$v[,1]
dend = reorder(as.dendrogram(hc), wts = sv)
as.hclust(dend)
}
pheatmap(test, clustering_callback = callback)
image.png
网友评论