美文网首页
R语言: pheatmap()

R语言: pheatmap()

作者: LET149 | 来源:发表于2023-07-17 09:23 被阅读0次

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的列中
示例一 示例二 示例三 示例四 示例五

相关文章

网友评论

      本文标题:R语言: pheatmap()

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