【r画图】环形热图

author author     2023-03-20     538

关键词:

参考技术A 热图(heatmap)在生信领域基本就是常规操作,基本技能,入门操作。能画热图的工具也有很多,我自己常用的R包是pheatmap。

最近经常看见环状的热图,所以就搜了一下资料学习一下,测试一下。

环状热图我也经常会在论文中看到,用法和热图相同,但更适合于需要展示较多基因(数据)时来使用。

===安装=====

install.packages("circlize")

install.packages("ComplexHeatmap")

library('ComplexHeatmap')

library('circlize')

===测试===

data<-read.table("expression.txt",header=T,row.names=1)

head(data)

//转化为矩阵并对其进行归一化

madt<-as.matrix(data)

madt2<-t(scale(t(madt)))

Heatmap(madt2)     //这就是默认参数,普通的热图

range(madt2)   //查看值的分布

mycol=colorRamp2(c(-1.7, 0.3, 2.3),c("blue", "white", "red")) //定义颜色范围

circos.heatmap(madt2,col=mycol)  //默认参数

注:

circos.clear()  //绘制完成后需要使用此函数完全清除布局

circos.par(gap.after=c(50))    //

调整圆环首尾间的距离,数值越大,距离越宽

circos.heatmap(madt2,col=mycol, dend.side="inside",rownames.side="outside",rownames.col="black",rownames.cex=0.9,rownames.font=1,cluster=TRUE)

注:dend.side:控制行聚类树的方向,inside为显示在圆环内圈,outside为显示在圆环外圈

#rownames.side:控制矩阵行名的方向,与dend.side相同;但注意二者不能在同一侧,必须一内一外

#cluster=TRUE为对行聚类,cluster=FALSE则不显示聚类

下面是换了inside和outside的结果:

===聚类树的调整和美化(需要用到两个别的包)===

install.packages("dendextend")     //改颜色

install.packages("dendsort")          //聚类树回调

library(dendextend)

library(dendsort)

circos.par(gap.after=c(50))

circos.heatmap(madt2,col=mycol,dend.side="inside",rownames.side="outside",track.height=0.38,rownames.col="black",rownames.cex=0.9,rownames.font=1,cluster=TRUE,dend.track.height=0.18,dend.callback=function(dend,m,si)color_branches(dend,k=15,col=1:15))

注:track.height:轨道的高度,数值越大圆环越粗  dend.track.height:调整行聚类树的高度  dend.callback:用于聚类树的回调,当需要对聚类树进行重新排序,或者添加颜色时使用

包含的三个参数:dend:当前扇区的树状图;m:当前扇区对应的子矩阵;si:当前扇区的名称   color_branches():修改聚类树颜色

circos.clear()

//添加图例标签等

lg=Legend(title="Exp",col_fun=mycol,direction= c("vertical"))

grid.draw(lg)

//添加列名

circos.track(track.index=get.current.track.index(),panel.fun=function(x,y)



if(CELL_META$sector.numeric.index==1)



cn=colnames(madt2)

n=length(cn)

circos.text(rep(CELL_META$cell.xlim[2],n)+convert_x(0.3,"mm"), //x坐标

4.1+(1:n)*0.7, //y坐标和间距

cn,cex=0.8,adj=c(0,1),facing="inside")



,bg.border=NA)

mycol2=colorRamp2(c(-1.7, 0.5, 2.3),c("#57ab81", "white", "#ff9600"))

也可以更改上面的颜色,从而改变热图的配色:

===分组热图绘制========

#circos.heatmap()内只能是一个矩阵,但如果矩阵数据存在分组,可以用split参数来指定分类变量

split = sample(letters[1:2], 40, replace = TRUE)

split = factor(split, levels = letters[1:2])

circos.clear()

circos.par(gap.after=c(22))

circos.heatmap(madt2,col=mycol,split=split,dend.side="inside",rownames.side="outside",track.height = 0.38,

rownames.col="black",rownames.cex=0.9,

rownames.font=1,

cluster=TRUE,

dend.track.height=0.18,

dend.callback=function(dend,m,si) 



color_branches(dend,k=15,col=1:15)



)

//假设有两个热图的矩阵数据

madt2<-t(scale(t(madt)))

madt3<-t(scale(t(madt)))

split2 = sample(letters[1:2], 40, replace = TRUE)

split2 = factor(split2, levels = letters[1:2])

circos.clear()

circos.par(gap.after=c(8))

circos.heatmap(madt2,col=mycol2,split=split2,dend.side="outside",

cluster=TRUE,

dend.track.height=0.2,

dend.callback=function(dend,m,si)

color_branches(dend,k=15,col=1:15)



)

circos.heatmap(madt3, col = mycol,rownames.side="inside",rownames.cex=0.8)

matlab|绘图复刻|分组环形热图(代码片段)

有粉丝问我EcologyLetters,(2021)24:1018–1028Soilcarbonpersistencegovernedbyplantinputandmineralprotectionatregionalandglobalscales这篇文章中的Figure2咋画,原图长这样:复刻效果:完整步骤0数据定义按理说应该从xlsx中读取数据 查看详情

matlab|绘图复刻|带树状图的环形热图(代码片段)

本期教大家如何绘制带树状图的环状热图,要复刻的图片长这样:复刻效果:需要安装StatisticsandMachineLearningToolbox即统计与机器学习工具箱!!!需要安装StatisticsandMachineLearningToolbox即统计与机器学习工具... 查看详情

matlab|绘图复刻|带树状图的环形热图(代码片段)

本期教大家如何绘制带树状图的环状热图,要复刻的图片长这样:复刻效果:需要安装StatisticsandMachineLearningToolbox即统计与机器学习工具箱!!!需要安装StatisticsandMachineLearningToolbox即统计与机器学习工具... 查看详情

热图3:热图行列分组信息注释

...编辑好Excel文件,然后读入。同理,行的信息注释如下:画图(用pheatmap函数):发现注释信息已经全部添加上了,效果还不错,但是注释的颜色不太好。这个也是可以个性化实现的,用你喜欢的颜色即可。我们示例几个:在画... 查看详情

R 中热图/聚类默认值的差异(热图与热图.2)?

】R中热图/聚类默认值的差异(热图与热图.2)?【英文标题】:differencesinheatmap/clusteringdefaultsinR(heatplotversusheatmap.2)?【发布时间】:2013-07-2906:57:11【问题描述】:我正在比较两种在R中使用树状图创建热图的方法,一种是使用made4... 查看详情

使用 R 创建热图

】使用R创建热图【英文标题】:CreatingaheatmapusingR【发布时间】:2021-09-2600:58:59【问题描述】:我想创建一个热图来显示我拥有的数据。数据由3列和100行组成。我使用以下代码使用R中的ggplot包创建热图。x=c("x1","x2","x3")y=paste0("var... 查看详情

r矩阵热图(代码片段)

查看详情

r热图与数字(代码片段)

查看详情

如何在 R 中为多个热图设置动画

】如何在R中为多个热图设置动画【英文标题】:HowtoanimateseveralheatmapsinR【发布时间】:2021-09-2916:10:39【问题描述】:我有30个方阵形式的热图。每个热图都链接到一个日期,我想创建一个动画,根据日期从一个热图过渡到下一个... 查看详情

R热图:将颜色分配给值

】R热图:将颜色分配给值【英文标题】:Rheatmap:assigncolorstovalues【发布时间】:2021-09-1816:20:20【问题描述】:我在R图表库(https://www.r-graph-gallery.com/79-levelplot-with-ggplot2.html)中找到了以下R代码作为热图并稍作修改:#Librarylibrary(ggplo... 查看详情

R中的热图或密度图

】R中的热图或密度图【英文标题】:HeatmapordensitymapinR【发布时间】:2012-04-1719:57:19【问题描述】:我是R新手,正在尝试创建热图或密度图来显示我的结果。我有20个不同地点和20年的x数据。我试图在同一张地图中显示位置和年... 查看详情

r中的热图足球比赛

】r中的热图足球比赛【英文标题】:Heatmapsoccergameinr【发布时间】:2020-11-0103:25:21【问题描述】:我有一个数据框,其中包含球员在球场上的位置。该区域的边界框为0-1000和0-750。起始球位375-500,起始球员位637-692。我尝试使用ge... 查看详情

R中的动画热图

】R中的动画热图【英文标题】:AnimatedheatmapinR【发布时间】:2018-11-2815:11:44【问题描述】:我正在尝试使用ggplot和(可能)plot_ly制作动画热图。到目前为止,我能够完成两个部分目标:1)我可以使用plot_ly制作动画散点图:dd<-... 查看详情

r语言绘图——层次聚类图及树状图添加sidebar(代码片段)

...列名赋一种颜色hv<-heatmap.2(x,RowSideColors=rc,ColSideColors=cc)#画图结果如下图:树状图+sidebar如果数据量比较大,不想显示热图部分,而只想显示树状图部分,则可以使用dendextend包(仍以mtcars数 查看详情

更改绘图热图中的颜色条标签 (R)

】更改绘图热图中的颜色条标签(R)【英文标题】:Changingthecolorbarlabelsinaplotlyheatmap(R)【发布时间】:2020-12-2610:15:41【问题描述】:我正在处理调查数据,当被问及一个变量是否影响另一个变量时,一个人的回答从“不”到“绝对... 查看详情

R:使用 ggplot2 的离散热图

】R:使用ggplot2的离散热图【英文标题】:R:Discreteheatmapwithggplot2【发布时间】:2021-02-0622:18:03【问题描述】:我需要一张热图:红色的“否”“是”为绿色。x轴上的城市y轴运动library(ggplot2)df=data.frame(City=c(Boston,Caracas,Madrid,Tokio),V... 查看详情

R:如何使用 ggplot2 创建一个半色半数的热图?

】R:如何使用ggplot2创建一个半色半数的热图?【英文标题】:R:howtocreateaheatmapwithhalfcoloursandhalfnumbersusingggplot2?【发布时间】:2021-12-2716:56:55【问题描述】:我正在尝试创建一个由热图表示的相关矩阵,其中一半的热图使用颜色... 查看详情

在 R 中创建类似 sgplot 的离散热图

】在R中创建类似sgplot的离散热图【英文标题】:Creatingsgplot-likediscreteheatmapinR【发布时间】:2021-06-2516:50:36【问题描述】:我想在R中创建一个热图,类似于SAS的procsgplot的输出,如下所示。我能做的最好的就是set.seed(1)testdat<-dat... 查看详情