dxy logo
首页丁香园病例库全部版块
搜索
登录

干货 | 教你如何绘制简单又好看的热图

发布于 2021-01-27 · 浏览 2152 · IP 湖北湖北
这个帖子发布于 4 年零 95 天前,其中的信息可能已发生改变或有所发展。

聚类热图作为目前最常见的一种可视化手段,热图因其丰富的色彩变化和生动饱满的信息表达被广泛应用于各种数据分析场景。因此,绘制热图成了相关从业者的一项必备技能。本文将用 R 语言和 Excel 尽可能简单的教你画一张好看的热图。

一、常规热图

第一步:安装和加载 R 包

install.packages("pheatmap")#安装R包

library(pheatmap)#绘制热图的包

library(RColorBrewer)#定义颜色的包

第二步:读取数据

inDF <- read.table("D:/metware/test/data_rstudio.txt", header=T, sep="\t", stringsAsFactors=F, check.names=F, quote="",na="N/A",row.names=1)

第三步:画图

file=pheatmap(inDF[,-1])#因为此时第一列为类别,不是数字,所以此时将这一列去掉

img

此时你就得到了一张简单的热图,是不是觉得很丑?是的,我也这么觉得。下面我们简单优化一下。

上面的颜色是不是看着完全分不清差异?因为我们最大值和最小值相差太大,我们需要对数据进行归一化处理 ,这里我们按行对数据归一化, scale = "row" 。

上面是不是有一块灰色的和其他的格格不入?因为那是缺失值,没有合适的颜色给他,既然如此,我们手动给他指定一个颜色, na_col = "black"。当然您也可以在原始数据中为他填充一个值(缺失值的填充您可以 点击这里 了解更多)。

file=pheatmap(inDF[,-1],na_col = "black",scale = "row")

现在你就得到了一张比刚刚好看得多的热图


img

有人说这个颜色我看着不习惯,我想自定义一下。可以,简单。color=colorRampPalette(strsplit("green,white,red",split = ",")[[1]])(round(100)) ,自己定义虽然可以个性化但是去思考用什么颜色是一件很麻烦的事,所以我们直接使用别人定义好的。

color = colorRampPalette(rev(brewer.pal(n=11, name='RdYlGn')))(round(100))

还有人说我只想对横坐标进行聚类,不想对纵坐标进行聚类,可以。cluster_rows=T,cluster_cols=F。

file=pheatmap(inDF[,-1],color = colorRampPalette(rev(brewer.pal(n=11, name='RdYlGn')))(round(100)),cluster_rows=T,cluster_cols=F,na_col = "black",scale = "row")

img

此时有人说我的列名是有分组的,我想分颜色显示。ok,不仅可以分颜色显示还可以自定义颜色。顺便帮你把列也分个组吧。

img
img

此函数的参数较多,可以进行细节调整,完整参数请复制链接:

https://cran.r-project.org/web/packages/pheatmap/pheatmap.pdf 至浏览器查看官方文档。

本文完整代码及注释如下:

img
img


二、交互式热图

交互式热图为 html 的网页文件,使用浏览器打开后将鼠标移动至小方块上可以显示对应的值和横纵坐标,且可以随意放大。

img
img

三、迈维云

若您为迈维客户,您将拥有迈维云平台使用权限,里面有众多分析工具。复制链接: https://cloud.metware.cn/auth/login 至浏览器,登录后即可使用。

找到聚类热图工具点击并按照右侧详细说明准备好一份归一化后的数据上传提交即可获得一份热图。

img


四、Excel 画热图

若您只是单纯的想用颜色表示一下每个值大小,如果仅仅是这样的话 Excel 就可以做到。

img

然后按照如图调整就可以得到一张用不同色块表示大小的图一张。

img

最后按照下图隐藏数字。

img


文章原文及完整版代码下载链接: https://wechat.dxy.cn/japi/file/6bf835fb35fba53d7e734a04db63c3ea/18586

最后编辑于 2022-10-09 · 浏览 2152

回复39 5

全部讨论0

默认最新
avatar
分享帖子
share-weibo分享到微博
share-weibo分享到微信
认证
返回顶部