https://www.jianshu.com/p/d9e46f4909b9?from=singlemessage
https://www.jianshu.com/p/1c55ea64ff3f
本身是一个R包,即pheatmap,同时也是一个热图绘制函数(包含在这个R包中)
1. 画图
- 输入的数据类型可以是矩阵或数据框(所用元素必须是数值类型)
> aa <- rnorm(10)
> aa
[1] 0.9776812 -1.0920903 0.4549197 -0.8919608 -1.1659368 1.4973326 -0.1212030 1.2195271 -0.8531547 -1.7511741
> dim(aa) <- c(5,2)
> aa
[,1] [,2]
[1,] 0.9776812 1.4973326
[2,] -1.0920903 -0.1212030
[3,] 0.4549197 1.2195271
[4,] -0.8919608 -0.8531547
[5,] -1.1659368 -1.7511741
> bb <- rnorm(10)+2
> bb
[1] 2.761983 1.537864 1.990649 2.636954 1.852780 2.688776 1.658533 1.176793 3.384660 1.657643
> dim(bb) <- c(5,2)
> bb
[,1] [,2]
[1,] 2.761983 2.688776
[2,] 1.537864 1.658533
[3,] 1.990649 1.176793
[4,] 2.636954 3.384660
[5,] 1.852780 1.657643
> pheatmap(aa) #绘制热图,如图一;热图的每一列对应数据的相应列,每一行对应数据的相应行,每个格子上的色块都是对数据中相应位置的数据的反映
> pheatmap(aa,cluster_rows = F,cluster_cols = F) #绘制热图,但不进行聚类(按照颜色深浅进行排序),如图二;是否聚类可以通过参数设置,如果不设置则默认为行与行、列与列之间进行聚类
> pheatmap(aa,scale="row") #将数据按行进行标准化,防止一个离群值的出现而掩盖了正常值的视图
> pheatmap(aa,scale="column") #将数据按列进行标准化
pheatmap(aa,color=colorRampPalette(c("red","white","blue"))(50))
![图一.png](https://upload###本身是一个R包,即pheatmap,同时也是一个热图绘制函数(包含在这个R包中)
- 输入的数据类型可以是矩阵或数据框(所用元素必须是数值类型)
> aa <- rnorm(10)
> aa
[1] 0.9776812 -1.0920903 0.4549197 -0.8919608 -1.1659368 1.4973326 -0.1212030 1.2195271 -0.8531547 -1.7511741
> dim(aa) <- c(5,2)
> aa
[,1] [,2]
[1,] 0.9776812 1.4973326
[2,] -1.0920903 -0.1212030
[3,] 0.4549197 1.2195271
[4,] -0.8919608 -0.8531547
[5,] -1.1659368 -1.7511741
> bb <- rnorm(10)+2
> bb
[1] 2.761983 1.537864 1.990649 2.636954 1.852780 2.688776 1.658533 1.176793 3.384660 1.657643
> dim(bb) <- c(5,2)
> bb
[,1] [,2]
[1,] 2.761983 2.688776
[2,] 1.537864 1.658533
[3,] 1.990649 1.176793
[4,] 2.636954 3.384660
[5,] 1.852780 1.657643
> pheatmap(aa) #绘制热图,如图一;热图的每一列对应数据的相应列,每一行对应数据的相应行,每个格子上的色块都是对数据中相应位置的数据的反映
> pheatmap(aa,cluster_rows = F,cluster_cols = F) #绘制热图,但不进行聚类(按照颜色深浅进行排序),如图二;是否聚类可以通过参数设置,如果不设置则默认为行与行、列与列之间进行聚类
> pheatmap(aa,scale="row") #将数据按行进行标准化,防止一个离群值的出现而掩盖了正常值的视图
> pheatmap(aa,scale="column") #将数据按列进行标准化
> pheatmap(aa,legend=F) #选择不绘制图例
图一.png
图二.png
对热图进行颜色的修改
- 基本语法
pheatmap(aa,color=)
,颜色用向量来给出
> pheatmap(aa,color=c("red","white","blue")) #用简单的三色来标记热图,但这样只会出现三个颜色,在视图上会漏掉很多信息
> colorRampPalette(c("red","white","blue"))(200) #把颜色按红白蓝的顺序等分成200份,使用这样的颜色画图能使视图保留原始数据的信息
> pheatmap(aa,color=colorRampPalette(c("red","white","blue"))(50)) #对热图进行颜色的修改
修改图像大小和标题
pheatmap(aa,cellwidth = 15*2, cellheight = 12*2, main = "Example heatmap") #修改每个色块的大小,给图像加标题
给图像的列或行进行分组(标记)
- 基本语法
pheatmap(aa,annotation_col=,annotation_row=)
- annotation_col= : 应该是一个数据框,数据框的行名是必须的,且是此数据对应全部列名,列数据应该是各行名对应分组(标记),此分组(标记)可以不止一个,则分组(标记)也是同时多个
annotation_col= : 应该是一个数据框,数据框的行名是必须的,且是此数据对应全部行名,列数据应该是各行名对应分组(标记),此分组(标记)可以不止一个,则分组(标记)也是同时多个
分组(标记).png
给分组选定颜色
- 基本语法
> an_cols <- list(group1=vector1,group2=vector2,group3=vector3)
> pheatmap(aa,annotation_col=,annotation_row=,annotation_colors=an_cols)
- 如果只有一个分组,则颜色用向量表示;如果有多个分组,颜色用列表表示
- 如果是用数值型数据进行的分组,则可以直接用c("red","blue")的方式来定义颜色,程序会自动根据此组的大小对颜色进行分割
- 如果是用字符型数据进行的分组,则颜色向量的长度必须和此组的大小相同
#对分组进行颜色标定
> ann_colors = list(Time = c("white", "firebrick"),CellType = c("blue","red"),GeneClass = c(Path1 = "#7570B3", Path2 = "#E7298A", Path3 = "#66A61E"))
> pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row, annotation_colors = ann_colors)
对分组进行颜色标定.png
把整个图像进行按行按列分割
- 基本语法
pheatmap(aa,gaps_row=,cutree=)
- gaps_row= : 正整数数值向量,数字代表在哪行之后添加分隔线(gap),使用此参数时行的聚类必须是FALSE,否则此参数被忽略
- gaps_col= : 正整数数值向量,数字代表在哪列之后添加分隔线(gap),使用此参数时列的聚类必须是FALSE,否则此参数被忽略
> pheatmap(test, annotation_col = annotation_col, cluster_rows = F,cluster_cols = F, gaps_row = c(10, 14), gaps_col = c(2,5))
把整个图像进行按行按列分割.png
根据聚类情况在行或列中添加分割线(gap)
- 基本语法
pheatmap(aa,cutree_row=,cutree_col=)
- cutree_row / cutree_col : 应该填入正整数,表示所有的行或列按照聚类情况被划分成的图块的个数;对行进行操作则行必须是聚类的;对列进行操作则列必须是聚类的
pheatmap(test, annotation_col = annotation_col, cutree_rows = 2 ,cutree_col = 3)
根据聚类情况在行或列中添加分割线.png
修改或去除横纵坐标的标记
- 基本语法
pheatmap(aa,labels_row=,labels_col=)
- labels_row= : 应该是一个重新标记行名的字符串类型向量,元素位置与图中位置对应;如果将某行的标记去除,则在此位置的元素应该是 " "(双引号,中间没有内容)
- labels_col= : 应该是一个重新标记列名的字符串类型向量,元素位置与图中位置对应;如果将某列的标记去除,则在此位置的元素应该是 " "(双引号,中间没有内容)
labels_row = c("", "", "", "", "", "", "", "", "ll50", "", "", "", "", "", "", "", "", "Il10", "Il15", "Il1b")
pheatmap(test, annotation_col = annotation_col, labels_row = labels_row)
修改或去除横纵坐标的标记.png
2. 对行或列进行聚类,并提取聚类结果
https://www.omicsclass.com/article/508
https://zhuanlan.zhihu.com/p/134653530
重要函数:
cutree()
kk <- matrix(rnorm(1:100), nrow = 10)
rownames(kk) <- paste("AA", 1:10, sep = "_")
colnames(kk) <- paste("BB", 1:10, sep = "_")
kk '#示例一
pp <- pheatmap(kk, cutree_rows = 3)
pp #示例二
row_cluster <- cutree(pp$tree_row, k=3)
row_cluster #示例三
order_new <- kk[pp$tree_row$order,]
order_new <- as.data.frame(order_new)
order_new #示例四
order_new[["cluster"]] <- as.factor(row_cluster[match(rownames(order_new), names(row_cluster))])
order_new #示例五,每一行所处的cluster信息存放在名为cluster的列中
![](https://img.haomeiwen.com/i23414774/6c83813533f677c6.png)
![](https://img.haomeiwen.com/i23414774/9e498e036c9beae9.png)
![](https://img.haomeiwen.com/i23414774/e8785d608f179f55.png)
![](https://img.haomeiwen.com/i23414774/9b5d081b6ee4e9d4.png)
![](https://img.haomeiwen.com/i23414774/6aa9d27e4ed60907.png)
网友评论