美文网首页
R pheatmap画热图

R pheatmap画热图

作者: KingTown | 来源:发表于2022-08-25 20:44 被阅读0次

绘制热图的函数。

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

相关文章

网友评论

      本文标题:R pheatmap画热图

      本文链接:https://www.haomeiwen.com/subject/aslxnrtx.html