科研服务

干货分享 新闻动态
干货分享 | 一文带你玩转环形热图
发布时间 2023-11-27

环形热图,顾名思义,热图的一种展现形式。常见的四四方方格式已经司空见惯,换个展现形式,也许会让你的文章耳目一新。

干货分享 | 一文带你玩转环形热图(图1)

环形热图的好处,可以在一张图上展现多个维度的数据,尤其适合进行多组学间数据展示,揭示不同组学间的关联与规律。

我们今天的作图都将依赖于R包“circlizecirclize”中的circos.heatmap()函数是专门用来简化绘制环形热图的。下载好R包后,首先创建数据,我们用自己数据做图时要注意数据使用中心化后的数据。

干货分享 | 一文带你玩转环形热图(图2)

干货分享 | 一文带你玩转环形热图(图3)

环形热图的数据输入格式和常规热图的没什么区别,都是matrix格式,行为代谢物名称,列为样本名称(注意不要混进物质名列)。

用circos.heatmap()先绘制一个简单的环形热图。

干货分享 | 一文带你玩转环形热图(图4)

干货分享 | 一文带你玩转环形热图(图5)

代码中“(-2,0,2)”代表的是图例和映射范围,可以根据自己的数据范围来设置。“dend.side” 表示树状图, “rownames.side”代表矩阵的行名也就是代谢物名称,“outside”即标注在圈外,“inside”表示展现在环形内部。circos.heatmap()没有内置的图例函数,所以需要用Legend()添加图例。

下一步,我们还可以增添一些新的注释信息——样本名称,可以先用circos.par()来控制布局,例如起始的角度、扇形之间的间隔,为样本标注预留空间。

干货分享 | 一文带你玩转环形热图(图6)

干货分享 | 一文带你玩转环形热图(图7)

接下来,再用circos.text()circos.track()添加样本名。

干货分享 | 一文带你玩转环形热图(图8)

干货分享 | 一文带你玩转环形热图(图9)

样本字体大小和位置可以根据自己的数据进行调试,寻找合适的参数。

可能有人会问,常规热图除了物质聚类也能样本聚类,环形热图可以吗?答案是当然可以。但circos.heatmap()不能直接对列进行聚类,我们可以在输入数据那步先进行聚类,再将绘图数据按聚类结果排列。

干货分享 | 一文带你玩转环形热图(图10)

干货分享 | 一文带你玩转环形热图(图11)

可以看见,我们的样本排列顺序已经改变。前面提到环形热图适用于展现多组学数据,这里可以添加其他组学数据,创建多个热图环。

我们再创建一个数据框:

干货分享 | 一文带你玩转环形热图(图12)

干货分享 | 一文带你玩转环形热图(图13)

注意,新的圆环是叠加在原先环形的内侧,所有圆环的宽度相加超过限度就会报错。

干货分享 | 一文带你玩转环形热图(图14)

除了一些常规的设置,我们也可以在字体上玩一些花样,将字体设置成随机样式、大小。

干货分享 | 一文带你玩转环形热图(图15)

干货分享 | 一文带你玩转环形热图(图16)

字体能五颜六色了,树状图当然也不能示弱。树状图的渲染可以通过dendextend包的color_branches()函数实现,在相应的扇形中生成了树状图之后调用,可以用于设置树状图的顺序和颜色。

dend.callback:该函数需要传递三个参数

· dend: 当前扇形的树状图

· n: 当前扇形所对应的数据子集

· si: 当前扇形的索引或名称

若是没有分组信息也可以自定义子集个数,假设k为4

干货分享 | 一文带你玩转环形热图(图17)

干货分享 | 一文带你玩转环形热图(图18)

circos.heatmap()还可以与其他类型的轨迹混用,例如在热图的内侧绘制代表行均值的散点图。

干货分享 | 一文带你玩转环形热图(图19)

干货分享 | 一文带你玩转环形热图(图20)

若想要热图在内,散点图在外,需要用到circos.heatmap.initialize()进行热图布局。先绘制散点图再绘制热图。

干货分享 | 一文带你玩转环形热图(图21)

干货分享 | 一文带你玩转环形热图(图22)


除了点图,也可以将热图与箱线图相结合,若数据有分组信息,即可以添加split参数对数据进行分组,并将箱线图按照组别分类映射颜色。

干货分享 | 一文带你玩转环形热图(图23)

干货分享 | 一文带你玩转环形热图(图24)

将以上的参数自由组合,就能得到一张自己专属的环形热图啦。

干货分享 | 一文带你玩转环形热图(图25)

干货分享 | 一文带你玩转环形热图(图26)

今天学完就不要在文章里放普通的热图啦,快一起来学漂亮的环形热图吧!


微信

在线
咨询

QQ

点击QQ咨询

返回
顶部