ggplot集锦

pheatmap 热图双层标签

2023-04-14  本文已影响0人  努力学习的消炎药

前段时间在学习的时候看到了简书更新,觉得小明哥的这种做法稍显复杂,作为R小白,我之前一直在用pheatmap做热图,所以觉得做这种图片还是热图来的快捷一些。

原教程见

跟着Nature Metabolism学作图:R语言ggplot2热图组合树图和双层分组标记 - 简书 (jianshu.com)

image.png

首先还是之前的原图文简介:

image.png

三幅图的结构大致类似,复杂一点的是O图,所以还是针对O图的复现。

数据点击这里即可下载:

https://static-content.springer.com/esm/art%3A10.1038%2Fs42255-022-00674-x/MediaObjects/42255_2022_674_MOESM4_ESM.xlsx

下载好后新建一个project,复制之前的即可,然后打开。

image.png

打开找到数据位置,先把NA换成 0 不然后面数据就没法搞了,然后选择数据复制。

image.png
#加载一些常用的包
library(pheatmap)
library(data.table)
library(ggplot2)

#复制完后直接读取剪切板
data <- read.delim('clipboard',header = T,row.names = 'X')
head(data)

image.png
#可以看到分组名就在列名里,由此我们构建一个分组
grouporg <- rep(c('brain','heart','lung','kidney','liver','vis','sc'),rep(3,7))
grouptissue <- rep(c('a','c','v'),7)

#构建 热图的分组标签,是一个dataframe
annotation_col = data.frame(tissue = grouptissue ,
                            organ = grouporg)
rownames(annotation_col) <- colnames(data) ##rowname要和dataframe对应。

## 分组的颜色  选一个喜欢的额颜色,构建一个list
ann_colors =list(organ =c(    brain="#bfc8bf",
                              heart="#8cb5ad",
                              lung="#648a86",
                              kidney="#9b9b75",
                              liver="#8d8d45",
                              vis = '#D1EEF2FF',
                              sc = '#ECE0C3FF'),
                 tissue = c(a = '#95C08BFF',
                            c = '#FFBEFEFF',
                            v = '#FF8B26FF'))
##画图  tips 图片赋值对象外加括号就可以一边赋值一边出图
(p = pheatmap(data, #热图的数据
             cluster_rows = T,#行聚类
             cluster_cols = F,#列聚类,可以看出样本之间的区分度
             annotation_col =annotation_col, #标注样本分类 就是刚才的分组
             # annotation_row = annotation_row, #要是基因有分组的话,也可以构建一个基因分组
             annotation_legend=TRUE, # 显示注释
             show_rownames = T,# 显示行名
             show_colnames = F,# 列名
             # scale = "row", #以行来标准化,这个功能很不错 但是画出来对比了一下,原文没有标准化
             annotation_colors =ann_colors ,#组标签的颜色
             gaps_col = c(3,6,9,12,15,18), #中间加一组gap,区分度更高
             treeheight_row = 20, #聚类树高低
             treeheight_col = 0, # 列聚类树,此处没聚类,要是有设置为0就可以只聚类不显示树
             clustering_distance_rows = "manhattan",##多种聚类方法可以尝试,总有一款你喜欢
             breaks = seq(-1.5,1.5,length.out = 100),  ##热图的颜色 修改
             color =colorRampPalette(c("black", "white","red"))(100),#调成一个顺眼的颜色
             main =' pheatmap ',border=F,#外边框,喜欢无边框的
             cellwidth = 6, cellheight = 6,# 格子比例
             fontsize = 6))

直接出的图,右侧的标签和原图稍有不符,pheatmap的缺点就是,标签不能直接写到图上的标签上(也可能是我没发现)

image.png

也是小问题,

pdf('123plot.pdf',width = 6,height = 4)
p
dev.off()

保存一下用AI修一下,把名字移上去即可


image.png

对比一下原图

image.png

也差不多一致了。

上一篇 下一篇

猜你喜欢

热点阅读