美文网首页绘图生信绘图R语言可视化
运用 R语言 pheatmap 包绘制热图进阶部分

运用 R语言 pheatmap 包绘制热图进阶部分

作者: fafu生信小蘑菇 | 来源:发表于2021-04-21 16:25 被阅读0次

    pheatmap包来显示行或列的分组信息

    行或列的分组注释信息

    在EXCEL中整理好样本和物种的注释信息,当然这个需要依据你的具体需求来确定。

    对样本的注释信息,比如这里用到了采样环境,和样本分类

    对样本的注释信息.png

    对属水平物种的属于哪个门水平的注释,你可以用其他方式来区分或不做注释

    物种属水平注释信息.png

    注意:将上述的注释信息保存为文本文件(制表符格式),当然你可以保存为其他格式,但在R语言中需要使用不同的函数来将数据导入。

    导入行或列的分组注释信息

    在RStudio 中使用 read.table 函数来导入行或列的分组注释信息

    annotation_row<-read.table("phylum.txt",header=T,sep="\t",row.names=1)
    # 这些需要将导入的注释信息转化为data.frame 格式
    annotation_row <- as.data.frame(annotation_row) 
    annotation_col<-read.table("样品信息.txt",header=T,sep="\t",row.names=1)
    annotation_col <- as.data.frame(annotation_col)
    # 查看行或列注释信息的导入情况,我比较喜欢view,也可以使用head函数查看前6行。
    View(annotation_col)
    View(annotation_row)
    
    样本的注释信息.png
    物种属水平注释信息.png

    出图查看注释情况

    注意:data.1是pheatmap包基础篇中介绍过使用z-score中心化和标准化的数据;
    具体可以参考上一期内容

    # data.1是pheatmap包基础篇中介绍过使用z-score中心化和标准化的数据
    # annotation_col = annotation_col #添加列注释信息
    # annotation_row = annotation_row 添加行注释信息
    # 这里注意横纵的注释信息要对好,别错了
    pheatmap(data.1, annotation_col = annotation_col, annotation_row = annotation_row,
             cellwidth = 20, cellheight = 15)
    
    注释后出图.png

    常见报错
    Error in names(annotation_colors[[names(annotation)[i]]]) <- l :
    'names' attribute [2] must be the same length as the vector [1]
    如果出图出现这个报错,一般是横纵注释信息数量不一致,应该是你横纵注释信息放错位置了,可以调换一下顺序。

    修改注释信息及颜色参数

    使用annotation_legend = FALSE 命令去掉注释图例

    pheatmap(data.1, annotation_col = annotation_col, annotation_row = annotation_row,
             cellwidth = 20, cellheight = 15,
             annotation_legend = FALSE)
    
    注释图例去除后.png

    自定注释信息的颜色列表

    ann_colors = list(
       species= c("white", "tomato4"),
       environment = c(X1 = "slateblue3", X2 = "red2"),
      phylum = c(phylum1 = "#7D26CD", phylum2 = "#E7298A", phylum3 = "#66A61E")
    )
    head(ann_colors)
    

    使用 annotation_colors 设定注释信息的颜色

    # annotation_colors设定注释信息的颜色
    pheatmap(data.1, annotation_col = annotation_col, 
             annotation_row = annotation_row, 
             annotation_colors = ann_colors,
             cellwidth = 20, cellheight = 15)
    
    注释颜色修改.png

    这是注释颜色,好像不是特别好看,根据自己美感慢慢调节

    annotation_colors = ann_colors[1] 只修改species的注释颜色,其他保持不变

    pheatmap(data.1, annotation_col = annotation_col, 
             annotation_row = annotation_row, 
             annotation_colors = ann_colors[1],
             cellwidth = 20, cellheight = 15)
    
    指定修改注释颜色.png

    将热图分隔开

    使用 cutree_rows, cutree_cols 函数可以根据行列的聚类数将热图分隔开

    pheatmap(data.1,cutree_rows=3,cutree_cols=3,
             cellwidth = 20, cellheight = 15)
    
    根据行列的聚类数将热图分隔开.png

    使用gaps_row 和gaps_col 函数可以在指定位置处添加gap

    # gaps_row = c(7, 17)参数在第7和17行处添加gap, 同时对行不进行聚类
    pheatmap(data.1, annotation_col = annotation_col,
             cluster_rows = FALSE, gaps_row = c(7, 17),
             cellwidth = 20, cellheight = 15)
    
    指定位置添加GAP.png

    对行和列都不进行聚类,然后自定义划分行和列的gap

    # 对行和列都不聚类,自定义划分行和列的gap
    pheatmap(data.1, annotation_col = annotation_col,
             annotation_row = annotation_row, 
             cluster_rows = FALSE, cluster_cols = FALSE, 
             gaps_row = c(12, 21), gaps_col = c(5),
             cellwidth = 20, cellheight = 15)
    
    自定义划分行和列的gap.png
    注意:红色框不是r生成的,而是截图后手动添加,为了突出自定义的行和列

    自定义行列标签名

    自定义行的标签名

    labels_row = c("genus1", "genus2", "genus3", "genus4", " ", " ", " ", " ", " ", " ", 
                   " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
                   " ", " ", " ", " "," "," ", " ", "genus26", "genus27", "genus28")
    

    使用labels_row参数来添加行标签

    #  使用labels_row参数来添加行标签,但是最好把行的聚类给去除
    pheatmap(data.1, annotation_col = annotation_col, labels_row = labels_row,
             cluster_rows = FALSE,
             cellwidth = 20, cellheight = 15)
    
    修改横坐标名称.png

    使用filename 参数输出图片进行保存为pdf

    pheatmap(data.1, annotation_col = annotation_col, 
                      annotation_row = annotation_row, 
                      annotation_colors = ann_colors[1],
                      cellwidth = 20, cellheight = 15,
                      filename = "data.pdf")
    

    将热图的结果,按照聚类后的顺序进行输出

    result =pheatmap(data.1, annotation_col = annotation_col, 
                      annotation_row = annotation_row, 
                      annotation_colors = ann_colors[1],
                      cellwidth = 20, cellheight = 15)
    
    #  简要查看热图对象的信息
    > summary(result)
    
    查看热图对象.png

    将热图的结果,按照聚类后的顺序进行输出

    order_row = result$tree_row$order           #记录热图聚类后的行排序
    order_col = result$tree_col$order           #记录热图聚类后的列排序
    data.2 = data.frame(data[order_row,
                             order_col])        # 按照热图聚类后的顺序,重新排列原始数据
    data.2 = data.frame(rownames(data.2),
                        data.2,check.names =F)  # 将物种属名的行名加到表格数据中
    colnames(data.2)[1] = "genus" 
    write.table(data.2,file="genus聚类后数据.txt",row.names=FALSE,
                quote = FALSE,sep='\t')         #输出结果,保存到当前工作目录
    
    热图聚类后处理后的排序.png

    运用R语言 pheatmap 包绘制热图进阶部分的内容就到这结束了。

    如有不足或错误之处,请批评指正。
    有什么不明白的也欢迎留言讨论。
    感谢你的阅读!!!

    欢迎关注微信公众号:fafu 生信 小蘑菇

    相关文章

      网友评论

        本文标题:运用 R语言 pheatmap 包绘制热图进阶部分

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