最近在做免疫浸润方面的分析,主要是重现5.6分文章《Classification of triple-negative breast cancers based on Immunogenomic profiling》的分析内容。其中有一张免疫分型的热图,非常的重要,通过该图(下图)可以发现,乳腺癌可以很好的分成3个免疫亚型。今天就教大家采用pheatmap 重现这张图。
话不多说,上代码:
代码语言:javascript复制############################################################
# 1. pheatmap安装 ##
############################################################
install.packages('pheatmap')
install.packages('dplyr')
############################################################
# 2. 设置运行环境 ##
############################################################
library(pheatmap)
library(readr)
# 文件路径
pdata_file <- "F:/LookGene/Course/junior/R_plot/pheatmap/pheatmap_data.txt"
# 工作目录
work_dir <- "F:/LookGene/Course/junior/R_plot/pheatmap"
# 工作目录如果不存在,则创建目录
if( !file.exists(work_dir) ){
if( !dir.create(work_dir, showWarnings = FALSE, recursive = TRUE) ){
stop(paste("dir.create failed: outdir=",work_dir,sep=""))
}
}
# 设置工作目录(输出目录)
setwd(work_dir)
############################################################
# 3. pheatmap绘图 ##
############################################################
# 读取数据
ph.data <- read_tsv(pdata_file)
View(ph.data)
# 将数据进行转换
feature.name <- unlist(ph.data[1])
ph.data <- as.matrix(ph.data[-1])
rownames(ph.data) <- feature.name
pdata <- ph.data[1:29,]
# 查看pheatmap使用方法
?pheatmap
########################################
# 绘图
########################################
# 设置方格显示颜色
ph.color <- colorRampPalette(c("navy", "white", "firebrick3"))(100)
# 先聚类,进行并分组
clust <- pheatmap(pdata, show_rownames = F, show_colnames = F,scale = 'row', color =ph.color )
# 按聚类情况进行样品分成3个组
col_tree_cut <- cutree(clust$tree_col,3)
sample_cluster <- as.data.frame(factor(col_tree_cut,
labels = c('Immunity_L','Immunity_M','Immunity_H')))
dim(sample_cluster)
colnames(sample_cluster) <- "Subtype"
sample_cluster$ID <- rownames(sample_cluster)
head(sample_cluster)
# 指定其他注释信息
annotation_col = data.frame(
Subtype = factor(col_tree_cut, labels = c('Immunity_L','Immunity_M','Immunity_H')),
Tumor_purrity = ph.data['TumorPurity',],
Stromal_score = ph.data['StromalScore',],
Immnue_score = ph.data['ImmuneScore',]
)
rownames(annotation_col) <- colnames(pdata)
# 指定注释信息的颜色表示
ann_colors = list(
Subtype = c(Immunity_H = "red", Immunity_L = "green",Immunity_M="blue"),
Tumor_purrity = c("green", "red"),
Stromal_score = c("green", "red"),
Immnue_score = c("green", "red")
)
# 绘图
pheatmap(pdata, show_rownames = F, show_colnames = F,scale = 'row', color =ph.color ,
annotation_col = annotation_col,annotation_colors = ann_colors, cutree_cols=3,
filename = 'pheatmap.pdf')
想要掌握这热图的画法,需要先了解一下pheatmap
的使用方法。pheatmap中文说明文档见下表。
pheatmap说明文档
参数 | 详细说明 |
---|---|
mat | 绘图用的数值矩阵 |
color | 颜色向量 |
kmeans_k | kmeans聚类的数目,用于合并行为不同cluster |
breaks | 用于将矩阵中的数值映射为颜色,可定义显色范围 |
border_color | 方格边框颜色,NA为没有边框 |
cellwidth | 方格宽度,NA为自适应画图大小 |
cellheight | 方格高度,NA为自适应画图大小 |
scale | 行或列进行中心化和标准化 |
cluster_rows | 是否行聚类,默认True |
cluster_cols | 是否列聚类,默认True |
clustering_distance_rows | 行聚类的距离函数(参考dist函数), 默认为欧氏距离 |
clustering_distance_cols | 列聚类的距离函数, 默认为欧氏距离 |
clustering_method | 聚类的方法,参考 hclust |
clustering_callback | 聚类返回函数 |
cutree_rows | 行层次聚类的数目 |
cutree_cols | 列层次聚类的数目 |
treeheight_row | 行聚类树的高度,默认 50 |
treeheight_col | 列聚类树的高度,默认 50 |
legend | 图例是否显示 |
legend_breaks | 图例分割点 |
legend_labels | 图例分割点名称 |
annotation_row | 行注释信息的数据框 |
annotation_col | 列注释信息的数据框 |
annotation_colors | 行和列注释信息映射的颜色列表 |
annotation_legend | 是否显示注释信息的图例 |
annotation_names_row | 是否显示行注释信息的名称 |
annotation_names_col | 是否显示列注释信息的名称 |
drop_levels | 是否显示没有分类水平数据的图例 |
show_rownames | 是否显示行名 |
show_colnames | 是否显示列名 |
main | 图片的标题 |
fontsize | 字体大小, 默认为10 |
fontsize_row | 行名的字体大小 |
fontsize_col | 列名的字体大小 |
angle_col | 列标签的角度,可选(0, 45, 90, 270, 315) |
display_numbers | 方格上是否显示矩阵的数值 |
number_format | 数值显示的格式(C printf 风格) |
number_color | 数值的颜色 |
fontsize_number | 数值的字体大小 |
gaps_row | 行坐标位置设置 “空白分割” |
gaps_col | 列坐标位置设置 “空白分割” |
labels_row | 自定义行标签,替换行名 |
labels_col | 自定义列标签,替换列名 |
filename | 热图保存的名称 |
width | 图片宽度 |
height | 图片高度 |
silent | 不绘图 |
na_col | NA在热图上显示的颜色 |
测试数据
- 如果有免疫浸润方面的分析需求。