热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

R数据可视化24:环状热图

懒人617回归,其实并没有偷懒。最近一直忙碌于手中的课题,没有时间来写文(当然这都不是借口)。作为一个有包袱的生信博主,我要守护住我的优秀创作者徽章。废话不多说,今天我们共同关注环状热图(cir

懒人617回归,其实并没有偷懒。最近一直忙碌于手中的课题,没有时间来写文(当然这都不是借口)。作为一个有包袱的生信博主,我要守护住我的优秀创作者徽章。废话不多说,今天我们共同关注环状热图(circo heatmap)。

什么是环状热图

环状热图,顾名思义,就是热图的一种形式。按照我导的话就是,任何东西变成一个圈,就酷炫了起来,那么热图也是如此。首先,给大家展示几张环状热图。

R数据可视化24: 环状热图
来源:datavizproject(这张严格意义讲不属于环状热图,不过好看就放上来了)

R数据可视化24: 环状热图
来源:Cell (2021)

R数据可视化24: 环状热图
来源:circular visualization

环状热图的好处是可以在一张图上展示多个方面,很省空间,非常适合用于多组或者多组学的研究,因为可以揭示不同组学的变化规律和联系。当然如果要进一步解释数据的关系,那么环状热图可能就有点“花里胡哨”了。

如何做环状热图

今天我们来讲一个有意思的R包“circlize”。没错,是一个将各种图环化的包。其中有一个名为“circos.heatmap()”的函数,可以用于绘制环状图。这个函数是依赖于“ComplexHeatmap”包的(这也是一个非常好用的R包,有兴趣的人可以尝试一下)。所以,我们首先要安装上这些相关的包。
然后我们来看一下数据格式(因为最近是用了课题数据做了这个图,不方便展示,所以就用包里自带的例子了~~)。

mat1 = rbind(cbind(matrix(rnorm(50*5, mean = 1), nr = 50), 
                   matrix(rnorm(50*5, mean = -1), nr = 50)),
             cbind(matrix(rnorm(50*5, mean = -1), nr = 50), 
                   matrix(rnorm(50*5, mean = 1), nr = 50))
)
rownames(mat1) = paste0("R", 1:100)
colnames(mat1) = paste0("C", 1:10)
mat1 = mat1[sample(100, 100), ] # randomly permute rows
R数据可视化24: 环状热图

数据格式其实非常简单,和大部分做heatmap的包一样,要求matrix格式。每一列就是一个组,每一行就是具体的指标。
接下来我们看一下如何做图。做最基本的环状热图非常容易。

library(circlize)
library(ComplexHeatmap)
#绘制circoheatmap
col_fun1 = colorRamp2(c(-2, 0, 2), c("navy", "white", "firebrick3"))
circos.heatmap(mat1, col = col_fun1,dend.side = "inside",rownames.side = "outside")
#用于绘制legend
lgd = Legend(title = "mat1", col_fun = col_fun1)
grid.draw(lgd)
circos.clear()#一定要注意加上这个表示热图绘制完毕

(-2,0,2)是对应的legend里面的数值范围,可以根据需要进一步调整,后面的自然就是热图对应的颜色。
dend.side是用于确定clustering结果放在圈内还是圈外,rownames.side同理。
下面就是通过上述代码得到的最简单的热图了:

R数据可视化24: 环状热图

当然我们可以进一步加入更多的信息,比如组名(C1-C10)。我们可以用circos.text()和circos.track()来完成这件事。但是需要调试一下参数,将标签添加到合适的位置。

col_fun1 = colorRamp2(c(-2, 0, 2), c("navy", "white", "firebrick3"))
circos.par(gap.after = c(10))#空出一段用于添加label
circos.heatmap(mat1, col = col_fun1,dend.side = "inside",rownames.side = "outside",track.height = 0.4)
circos.track(track.index = get.current.track.index(), panel.fun = function(x, y) {
  if(CELL_META$sector.numeric.index == 1) { # the last sector
    cn = colnames(mat1)
    n = length(cn)
    circos.text(rep(CELL_META$cell.xlim[2], n) + convert_x(0.1, "mm"), #x坐标
                13+(1:n)*5,#y坐标
                cn, #标签
                cex = 0.5, adj = c(0, 1), facing = "inside")
  }
}, bg.border = NA)
lgd = Legend(title = "mat1", col_fun = col_fun1)
grid.draw(lgd)
circos.clear()
R数据可视化24: 环状热图

当然我们还可以添加新的环状热图(我懒得调整上一个label的位置了就去掉了,哈哈):

#生成一组新的数据
mat2 = mat1[sample(100, 100), ] 

col_fun1 = colorRamp2(c(-2, 0, 2), c("navy", "white", "firebrick3"))
col_fun2 = colorRamp2(c(-2, 0, 2), c("green", "white", "red"))

circos.par(gap.after = c(10))
circos.heatmap(mat1, col = col_fun1,rownames.side = "outside",track.height = 0.2)
circos.heatmap(mat2, col = col_fun2,dend.side = "inside",track.height = 0.2)

lgd = Legend(title = "mat1", col_fun = col_fun1)
grid.draw(lgd)
circos.clear()
R数据可视化24: 环状热图

今天的分享就到这里啦(我要去吃烧烤了好饿),这个包还有很多的内容大家可以自己自己去看,链接在此:https://jokergoo.github.io/circlize_book/book/

往期R数据可视化分享
R数据可视化23:Treemap图
R数据可视化22: 怎么获取CNS级颜色搭配
R数据可视化21: Edge Bundling图
R数据可视化20: 弦图
R数据可视化19: 环状条形图
R数据可视化18: 弧形图
R数据可视化17: 桑基图
R数据可视化16: 哑铃图
R数据可视化15: 倾斜图 Slope Graph
R数据可视化14: 生存曲线图
R数据可视化13: 瀑布图/突变图谱
R数据可视化12: 曼哈顿图
R数据可视化11: 相关性图
R数据可视化10: 蜜蜂图 Beeswarm
R数据可视化9: 棒棒糖图 Lollipop Chart
R数据可视化8: 金字塔图和偏差图
R数据可视化7: 气泡图 Bubble Plot
R数据可视化6: 面积图 Area Chart
R数据可视化5: 热图 Heatmap
R数据可视化4: PCA和PCoA图
R数据可视化3: 直方/条形图
R数据可视化2: 箱形图 Boxplot
R数据可视化1: 火山图


推荐阅读
  • 全卷积网络fcn详解_全卷积神经网络原理
    全卷积网络fcn详解_全卷积神经网络原理原文链接:全卷积网络FCN详解背景CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • 百度地图离线开发demo(热力图)
    热力图主要用了bmplib插件,initMap(){this.mapnewBMap.Map(myMap);constpointnewBMap.Point(118.13 ... [详细]
  • 注意力汇聚:NadarayaWatson 核回归
    Nadaraya-Watson核回归是具有注意力机制的机器学习范例。Nadaraya-Watson核回归的注意力汇聚是对训练数据中输出的加权平均。从注意力的角度来看, ... [详细]
  • 开发笔记:共享单车数据分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了共享单车数据分析相关的知识,希望对你有一定的参考价值。共享单车数据分析和共享单车用户行为分析PPT从数据分 ... [详细]
  • seaborn箱线图_Seaborn线图的数据可视化
    seaborn箱线图Hello,folks!Inthisarticle,wewillbetakingtheSeaborntutorialaheadandunderstandingt ... [详细]
  • 从CornerNet到CornerNetLite再到训练自己的数据
    从CornerNet到CornerNet-Lite再到训练自己的数据相关论文与代码相关工作CornerNetCornerNet-Lite训练自己的数据一.论文论 ... [详细]
author-avatar
ARUAN地盘_740
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有