收藏丨用两万字带你了解heatmap绘制工具及操作流程(附赠软件大礼包)matlab直方图

热图Heatmap,也叫热力图,可以用颜色变化来反映二维矩阵或表格中的数据信息,可以直观地将数据值的大小以定义的颜色深浅表示出来。热图使复杂的数据可视化和一目了然。通常根据需要将数据进行物种或样品间丰度相似性聚类,将聚类后数据表示在热图上,可将高丰度和低丰度的物种分块聚集,通过颜色梯度及相似程度来反映多个样品在各分类水平上群落组成的相似性和差异性。结果可有彩虹色和黑红色两种选择。

热图有两类:集群热图(clusterheatmap)和空间热图(spatialheatmap)。在集群热图里,图片大小固定在单元格里,制定成一个包含行和列的矩阵。单元格大小是可任意调节。而在空间热图里,在一个空间里大小和位置都固定好的。

热图的生成原理可以这样概括,先为离散点设定一个半径,创建一个缓冲区;再对每个离散点的缓冲区,使用渐进的灰度带(完整的灰度带是0-255),从内至外、从浅至深填充;因为灰度值可以叠加,数值越大则颜色越深,在灰度带中显得越白。实际上可选择ARGB模型中任一通道作为叠加灰度值,从而对于有缓冲区交叉的区域,可叠加灰度值,因而缓冲区交叉的越多,灰度值越大,这块区域越“热”。最后,用叠加后的灰度值为索引,从一条有256色的色带中映射颜色,并对颜色重新着色,从而实现热图。

灰度带

彩色带

二、热图的历史

热图其实并不是一种新的概念,可以追溯到19世纪。热图起源于数据矩阵中二维数值的显示。较大的数值用较小的深灰色或黑色方块(像素)表示。在1873年Lona就使用了阴影矩阵将巴黎各区的社会上统计数据实现了可视化。在1957年Sneath展示了聚类分析的结果,通过对矩阵的行和列进行置换,根据聚类将相似数值放置在彼此的附近。之后JacquesBertin使用了类似方法显示出符合格特曼尺度的数据,他将集群树连接到数据矩阵的行和列,这一想法来自于1973年RobertLing。RobertLing使用了打印机的字符来表示不同灰度,即一个像素就有一个字符宽度。在1994年LelandWilkinson开发了第一个计算机程序(SYSTAT),用于制作高分辨率彩色图形的集群热图。在1991年,软件设计师CormacKinney注册了“heatmap”商标,发明了一种用2D图形显示实时金融市场信息的工具。如今,热图仍然可以手工形式、Excel电子表格或使用像Hotjar这样的专业软件创建。

三、热图的类型

热图大致上可分为四种类型:

生物学热图,通常用在分子生物学范畴,可以显示从DNA微阵列获得的大量可比较样本(不同状态下的细胞、不同患者的样本)中的很多基因的表达水平。

树形图,是数据的2D分层分区,在视觉上类似于热图。

马赛克图,是一种平铺热图,用于表示双向或更高方式的数据表,与树形图一样,镶嵌在图中的矩形区域是分层组成。意味着这些区域是矩形。

密度函数可视化图,用来表示出图中点密度的热图,使人们能够独立在变焦参数感知点的密度。在2015年Perrot等人提出的一种方法,通过使用Spark和Hadoop等大数据基础设备,利用密度函数可看到几十亿个点。

四、热图在各个领域内的用途

热图通过众多数据点信息,汇聚成直观可视化颜色效果,至今热图被广泛应用在不同领域和范畴,比如气象预报、医疗成像、机房温度等,甚至应用于竞技体育领域的数据分析。

一场世界杯足球竞赛——评委们通常利用热图了解到冠军队伍中门将、后卫、中场和前锋的跑位,让我们一目了然地看到多名球员在比赛中跑位的差异。

天气、地震预测——气象局还可利用热图判断地震震源位置,可清楚看出哪些地方是地震高发区(频率最高)。

经济学上——结合百度地图和热图,就可利用热图看到金融商圈,将商家的坐标采集下来,根据坐标点进行聚类。看下面这张图,红色表示商家较多的地方,我们就可知道哪些是金融商圈。

那么,在生物学领域上热图提供什么用处呢?

在生物学上,尤其是分子生物学和生物信息学领域,热图经常用于展示多个基因在不同样本的表达水平,通过聚类等方式查看实验组和对照组特有的方式。

如上图所示,每一列代表一个样本,每一行代表一个基因,颜色代表表达量(这张图的图例看出,颜色越偏红色,数值越大,基因表达量越高)。

五、热图的可视化方式

为什么要进行数据可视化呢?相对于文字说明,将文字进行可视化可让大脑能同时处理更多的数据。而且,可视化能使传递的信息更清晰。当我们进行数据可视化的时候,我们可以看到一些用文字无法看到的信息。如果只用文字表示,我们只能看到一大堆冷冰冰的数字,很难找到当中的规律。如果善用数据图就发现出这对数据的变化趋势。

热图在生信分析中可实现可视化数据。我们当然用R包了,R包默认了heatmap函数。R包也有很多具备heatmap功能的包,比如ggplot函数、pheatmap、ComplexHeatmap包、heatmap.plus包把数据实现出来。绘制热图的软件或方法有很多,如Excel、R语言、html、Python、MATLAB等。

heatmap():用于绘制简单热图的函数

heatmap.2():绘制增强热图的函数

ComplexHeatmap:用于绘制、注释和排列复杂热图的R&bioconductor包(非常适用于基因组数据分析)

heatmap.2函数和我们之前要求的数据类型不太一样,这个函数输入数据要求是矩阵。

data(mtcars)x<-mtcarsy<-as.matrix(mtcars)

在RStudio中我们可以清楚的看到x和y的区别,x的type是dataframe的格式,而y是matrix也就是矩阵格式。这两种数据类型有什么差别呢?matrix中的值只能是一个格式,比如都是字符型。而dataframe可以同时支持不同的类型比如数值型和字符型。

在开始作图之前,首先得安装好R包。此R包可在Win10、MacOSX、Linux操作系统上运行。

R包下载完成后,点击运行”R-3.X-win.exe“这个程序包。

接下来,就是要安装RStudio。它包括一个支持直接代码执行的控制台,以及用于在工作区中绘制和跟踪变量的工具。它安装起来很简单,可到RStudio网页上下载即可。下载完成后,点击并运行“RStudio-1.2.XXXX.exe”。这里要注意的是,必须先安装R包,RStudio才能运行。

六、可视化工具的操作方法

(1)Excel作图法

然而它受到了最大行、列数的限制,如Excel2003的单个工作表最多包含65536行和256列,Excel2007增加到了1048576行和16384列),对于更大规模的数据存储和显示则能力有限。所以大规模的生物数据,如基因组和蛋白质组序列等信息,通常以支持更大容量的文本文件格式表示,并利用UltraEdit等专业工具进行查看。

Excel最简单、容易上手,但是功能性不强,不能像R包那样设置更多其他参

数。

那怎样操作呢?

1、打开MSExcel,制作一个100个随机数的数据集。

使用“=RAND()”,通过拉取的方式得到100个随机数据集。

2、选取“数据集”、“格式”、“条件格式”、“显示其他格式规则”、“新建规则”。最低值调为冷色,最高值调为暖色

3、点击确定,得到一个简单热图

4、我们不需要在图上显示数据。选中“设置单元格格式”、数字分类自定义,在类型中输入英文状态下的三个符号“;;;”

(2)R包的pheatmap绘制热图

首先,先给大家理清一下pheatmap参数的含义。

pheatmap基础绘图操作示范

第一步,加载你所需要用到R包。

library(pheatmap)

第二步,设置工作路径。

setwdrm(list=ls())

第三步,构建测试数据集。

test=matrix(rnorm(200),20,10)test[1:10,seq(1,10,2)]=test[1:10,seq(1,10,2)]+3test[11:20,seq(2,10,2)]=test[11:20,seq(2,10,2)]+2test[15:20,seq(2,10,2)]=test[15:20,seq(2,10,2)]+4colnames(test)=paste("Test",1:10,sep="")rownames(test)=paste("Gene",1:20,sep="")head(test)

结果生成如下:

第四步,绘图

pheatmap(test)

参数对行归一化

pheatmap(test,scale="row")

参数设定不同聚类方法

pheatmap(test,scale="row",clustering_method="average")

参数自定义颜色

pheatmap(test,color=colorRampPalette(c("navy","white","firebrick3"))(50))

参数设定不对行进行聚类

pheatmap(test,cluster_row=FALSE)

legend_breaks参数设定图例显示范围,legend_labels参数添加图例标签。

pheatmap(test,legend_breaks=c(1:5),legend_labels=c("1.0","2.0","3.0","4.0","5.0"))

legend=FALSE参数去掉图例

pheatmap(test,legend=FALSE)

border=FALSE参数去掉边框线

pheatmap(test,border=FALSE)

show_rownames和show_colnames参数设定是否显示行名和列名。

pheatmap(test,show_rownames=F,show_colnames=F)

treeheight_row和treeheight_col参数设定行和列聚类树的高度,默认为50

pheatmap(test,treeheight_row=30,treeheight_col=50)

display_numbers=TRUE参数设定在每个热图格子中显示相应的数值,number_color参数设置数值字体的颜色

pheatmap(test,display_numbers=TRUE,number_color="blue")

自定义数值的显示方式

pheatmap(test,display_numbers=matrix(ifelse(test>5,"*",""),nrow(test)))

cellwidth和cellheight参数设定每个热图格子的宽度和高度,main参数添加主标题。

pheatmap(test,cellwidth=15,cellheight=12,main="Example")

构建列注释信息

annotation_col=data.frame(CellType=factor(rep(c("CT1","CT2"),5)),Time=1:5)rownames(annotation_col)=paste("Test",1:10,sep="")head(annotation_col)

得出的结果如下:

CellTypeTimeTest1CT11Test2CT22Test3CT13Test4CT24Test5CT15Test6CT21

构建行注释信息

annotation_row=data.frame(GeneClass=factor(rep(c("Path1","Path2","Path3"),c(10,4,6))))rownames(annotation_row)=paste("Gene",1:20,sep="")head(annotation_row)

GeneClassGene1Path1Gene2Path1Gene3Path1Gene4Path1Gene5Path1Gene6Path1

annotation_col参数添加列注释信息

pheatmap(test,annotation_col=annotation_col)

annotation_legend=FALSE参数去掉注释图例

pheatmap(test,annotation_col=annotation_col,annotation_legend=FALSE)

同时添加行和列的注释信息

pheatmap(test,annotation_row=annotation_row,annotation_col=annotation_col)

自定义注释信息的颜色列表

ann_colors=list(Time=c("white","firebrick"),CellType=c(CT1="#1B9E77",CT2="#D95F02"),GeneClass=c(Path1="#7570B3",Path2="#E7298A",Path3="#66A61E"))head(ann_colors)

$Time[1]"white""firebrick"$CellTypeCT1CT2"#1B9E77""#D95F02"$GeneClassPath1Path2Path3"#7570B3""#E7298A""#66A61E"

设定注释信息的颜色

pheatmap(test,annotation_col=annotation_col,annotation_colors=ann_colors,main="Title")

pheatmap(test,annotation_col=annotation_col,annotation_row=annotation_row,annotation_colors=ann_colors)

pheatmap(test,annotation_col=annotation_col,annotation_colors=ann_colors[2])

pheatmap(test,annotation_col=annotation_col,cluster_rows=FALSE,gaps_row=c(10,14))

pheatmap(test,annotation_col=annotation_col,cluster_rows=FALSE,gaps_row=c(10,14),cutree_col=2

pheatmap(test,annotation_col=annotation_col,cluster_rows=FALSE,cluster_cols=FALSE,gaps_row=c(6,10,14),gaps_col=c(2,5,8))

labels_row=c("","","","","","","","","","","","","","","","","","Il10","Il15","Il1b")pheatmap(test,annotation_col=annotation_col,labels_row=labels_row)

~一张热图就这样轻松制作完成啦~

第五步,将热图结果按聚类后的顺序输出。

aa=pheatmap(test,scale="row")summary(aa)

得出,

LengthClassModetree_row7hclustlisttree_col7hclustlistkmeans1-none-logicalgtable6gtablelist

order_row=aa$tree_row$orderorder_col=aa$tree_col$orderdatat=data.frame(test[order_row,order_col])datat=data.frame(rownames(datat),datat,check.names=F)colnames(datat)[1]="geneid"write.table(datat,file="reorder.txt",row.names=FALSE,quote=FALSE,sep='\t')sessionInfo()

下面介绍一下常用的代码

对样本或基因标记分类的代码

#构建列注释信息my_sample_col<-data.frame(sample=rep(c("tumour","normal"),c(4,2)),Time=c(1,1,2,2,2,1))row.names(my_sample_col)<-colnames(test)head(my_sample_col)sampleTimeT1atumour1T1btumour1T2tumour2T3tumour2N1normal2N2normal1

#构建行注释信息,这里代码产生分组信息,也可以从数据读入一个表格,list=pheatmap(test)my_gene_col=cutree(list$tree_row,k=2)my_gene_col<-data.frame(cluster=ifelse(test=my_gene_col==1,yes="cluster1",no="cluster2"))set.seed(1984)my_random<-as.factor(sample(x=1:2,size=nrow(my_gene_col),replace=TRUE))my_gene_col$random<-my_randomhead(my_gene_col)clusterrandomGene_00562cluster12Gene_02296cluster22Gene_03861cluster22Gene_07390cluster22Gene_08042cluster21Gene_08694cluster11

行列注释的代码

pheatmap(test,annotation_row=my_gene_col,annotation_col=my_sample_col)

自定义分组颜色的代码

ann_colors=list(Time=c("white","firebrick"),sample=c(normal="#1B9E77",tumour="#D95F02"),cluster=c(`cluster1`="#7570B3",`cluster2`="#E7298A"),random=c(`1`="red",`2`="blue"))head(ann_colors)#annotation_colors设定注释信息的颜色pheatmap(test,annotation_col=my_sample_col,annotation_row=my_gene_col,annotation_colors=ann_colors,main="Title")

热图分块显示的代码

#手动指定gap划分区块:gaps_row=c(6,10)参数在第6和10行处添加gap,要求对行不进行聚类。对应的还有gaps_col,大家也可以试试pheatmap(test,annotation_col=my_sample_col,cluster_rows=FALSE,gaps_row=c(6,10))

#cutree_col=2,cutree_rows=2参数将列按聚类树的结果分成两部分,要求对列和进行聚类pheatmap(test,annotation_row=my_gene_col,annotation_col=my_sample_col,cutree_rows=2,cutree_cols=2)#自定义行的标签名。注意:基因名称的顺序与原始表格的顺序一致,而不是聚类后的顺序:labels_row=c("","","","","","","","","","","","","","","","","","TP53","FLC","her2","","","","","","AKT")#labels_row参数添加行标签pheatmap(test,annotation_col=my_sample_col,labels_row=labels_row)

(3)R包的ComplexHeatmap绘制热图

Complexheatmap是由顾祖光博士创建的R包,在他的GitHub里有详细的故事。ComplexHeatmap是基于绘图系统grid的。

Complexheatmap的设计原理是,它提供一套很灵活的方法,用于多热图,即热图列表布局及支持自定义注释绘图,一个热图列表包含若干热图和注释信息。

绘制热图首先需要准备已经标准化的二维矩阵作为输入,可以出图后我们就需要对主体部分进行修改,一些比较常用的参数包括单元格(颜色,边界,大小等),行/列聚类(是否聚类,是否展示聚类树,聚类树的位置,大小,颜色等),行/列注释(行/列名,位置,大小,颜色,角度等),图注信息等。

在ComplexHeatmap主要使用了grid绘图系统,使用gpar调整热图参数:

"col"控制颜色

"fill"控制填充色

"alpha"控制透明度

"lty"线的类型

"lwd"线宽

“fontsize"字符大小

而unit参数则主要控制一些距离参数,包括子图间的空隙row/column_gap=unit(1,"mm"),热图的长宽heatmap_width/height=unit(1,"npc"),聚类树的高度row/column_dend_width/height=unit(10,"mm")以及文字的最大长度row/column_names_max_width/height=unit(6,"cm")等。

控制聚类信息的参数:

cluster_columns,cluster_rows指定是否聚类

show_row_dend,show_column_dend是否展示聚类结果(进行聚类)

row_names_side,column_name_size

clustering_method_rows,clustering_method_columns聚类方法

row_dend_width,column_dend_height聚类树宽/高

row_km,column_km按聚类结果拆分热图

控制单元格的参数:

col=circlize::colorRamp2(c(-2,0,2),c("navy","white","firebrick3"))颜色。

rect_gp=gpar(col="white")指定单元格边界颜色

border指定热图边界颜色

控制行/列标签的参数:

row_labels,column_labels行/列标签

show_column_names,show_row_names是否显示列/行名

row_names_side``coolumn_names_side显示行/列名的位置("left","right","top","bottom")

row_names_gp``column_names_gp控制行/列名大小(gpar(fontsize=12))

row_names_rot``column_names_rot控制行/列名的角度

控制整体图形的参数:

heatmap_width=unit(1,"npc"),heatmap_height=unit(1,"npc")图形高/宽度

row_gap=unit(1,"mm"),column_gap=unit(1,"mm")子图空隙

控制图注的参数:

show_heatmap_legend是否展示图注

heatmap_legend_param图注参数(list(at=c(-2,0,2),labels=c(-2,0,2))#需要制定at和labels的list)

控制注释的参数:

"top_annotation=NULL"

"bottom_annotation=NULL"

"left_annotation=NULL"

"right_annotation=NULL"

HeatmapAnnotation热图注释

对于ComplexHeatmap来说,其主旨就是绘制复杂热图,所以对热图的注释以及拼图极其重视,对于*_annotation来说包括包括各种类型图形和文字丰富结果,并且还支持使用+(行)和%v%(列)对多个热图进行组装。热图注释是热图的重要组成部分,它显示与热图中的行或列关联的其他信息。ComplexHeatmap软件包为设置注释和定义新的注释图形提供了非常灵活的支持。注释可以放在热图的四个侧面,由top_annotation,bottom_annotation,left_annotation和right_annotation参数。

第一步,载入R包,完成本地安装。

if(!requireNamespace("BiocManager",quietly=TRUE))install.packages("BiocManager")BiocManager::install("ComplexHeatmap")

第二步,安装完成后,输入加载命令。

library(ComplexHeatmap)library(circlize)

ComplexHeatmap包提供了一种更灵活的方式支持单个热图的可视化。在下面的简单例子中,我们会说明如何设置参数以显示一个简单热图。

首先,载入语言包并生成一个随机矩阵。

set.seed(123)mat=cbind(rbind(matrix(rnorm(16,-1),4),matrix(rnorm(32,1),8)),rbind(matrix(rnorm(24,1),4),matrix(rnorm(48,-1),8)))mat=mat[sample(nrow(mat),nrow(mat)),sample(ncol(mat),ncol(mat))]rownames(mat)=paste0("R",1:12)colnames(mat)=paste0("C",1:10)

使用默认参数,一行命令即可作图

Heatmap(mat)

大多数情况下,热图可视化含连续值得矩阵。在这种情况下,用户需提供一个颜色映射函数。一个颜色映射函数需要接收一个数值向量并返回对应得颜色。circlize包提供得colorRamp2()对于生成这样得函数很有用。当前该函数通过LAB颜色空间线性在每个区间插入颜色。

-3到3的区间被线性插入值用于获取对应的颜色,值大于3的被映射为红色,小于-3的被映射为绿色,因此这里的颜色对于异常值具有鲁棒性。

mat2=matmat2[1,1]=100000Heatmap(mat2,col=colorRamp2(c(-3,0,3),c("green","white","red")),cluster_rows=FALSE,cluster_columns=FALSE)

如果矩阵值是连续的,也可提供一个颜色向量,颜色会根据第k个百分位进行插值。不过要记住这种方法对于异常点没有鲁棒性。

Heatmap(mat,col=rev(rainbow(10)))

如果矩阵包含离散值(要么是数值的要么是字符串),颜色应该指定为一个命名向量用于将离散值映射为颜色。如果颜色没有名字,那么颜色的顺序会对应于unique(mat)的顺序。

discrete_mat=matrix(sample(1:4,100,replace=TRUE),10,10)colors=structure(circlize::rand_color(4),names=c("1","2","3","4"))Heatmap(discrete_mat,col=colors)

或者一个字符串矩阵:

discrete_mat=matrix(sample(letters[1:4],100,replace=TRUE),10,10)colors=structure(circlize::rand_color(4),names=letters[1:4])Heatmap(discrete_mat,col=colors)

你可以看到,对于数值型矩阵(无论它是连续映射还是离散映射),默认两个维度都会进行聚类。而对于字符串矩阵,聚类默认是被抑制的。

热图中允许存在NA值。你可以通过na_col参数控制NA值的颜色。包含NA值矩阵也可以使用Heatmap()函数聚类(因为dist()函数接收NA值),使用“pearson”、“spearman”或“kendall”方法会给出警告信息。

mat_with_na=matmat_with_na[sample(c(TRUE,FALSE),nrow(mat)*ncol(mat),replace=TRUE,prob=c(1,9))]=NAHeatmap(mat_with_na,na_col="orange",clustering_distance_rows="pearson")##Warninginget_dist(submat,distance):NAexistsinthematrix,calculatingdistancebyremovingNA##values.

对颜色插值来说颜色空间非常重要。默认情况下,颜色都是在LABcolorspace中线性插值,但你可以使用,colorRamp2()函数选择其他的颜色空间。比较下面的两幅图:

f1=colorRamp2(seq(min(mat),max(mat),length=3),c("blue","#EEEEEE","red"))f2=colorRamp2(seq(min(mat),max(mat),length=3),c("blue","#EEEEEE","red"),space="RGB")Heatmap(mat,col=f1,column_title="LABcolorspace")+Heatmap(mat,col=f2,column_title="RGBcolorspace")

设置标题

Heatmap(mat,name="legend")

热图图例的标题也可以通过参数heatmap_legend_param进行更改。

Heatmap(mat,heatmap_legend_param=list(title="legend"))

你可以设定热图的行与列标题,行与列图形参数分别通过row_title_gp和column_title_gp选项指定,使用gpar()函数进行具体的设置。

Heatmap(mat,name="foo",column_title="X",row_title="Y")

Heatmap(mat,name="foo",column_title="HAHAHA",column_title_gp=gpar(fontsize=20,fontface="bold"))

标题的选择可以使用row_title_rot和column_title_rot设置,但只支持水平和垂直旋转。

Heatmap(mat,name="foo",row_title="Le",row_title_rot=0)

聚类

聚类是热图可视化的关键特征之一。该包支持高度灵活的聚类设定。

首先有一些聚类的通用设定,例如是否显示树状图、大小。

Heatmap(mat,name="foo",cluster_rows=FALSE,show_column_dend=FALSE)

Heatmap(mat,name="foo",column_dend_height=unit(2,"cm"))

有3种方式指定聚类的距离度量:

使用提前设定的选项,合法的值包括dist()函数支持的方法以及pearson、spearman和kendall。

一个从矩阵中计算距离的自定义函数,函数仅包含一个参数。

一个从两个向量中计算距离的自定义函数,函数仅包含2个参数。

Heatmap(mat,name="foo",clustering_distance_rows="pearson")Heatmap(mat,name="foo",clustering_distance_rows=function(m)dist(m))Heatmap(mat,name="foo",clustering_distance_rows=function(x,y)1-cor(x,y))Heatmap(mat,name="foo",clustering_distance_rows=function(x,y)1-cor(x,y))

基于这个特征,我们开源使用配对距离应用聚类使得可以鲁棒地处理异常值。

mat_with_outliers=matfor(iin1:10)mat_with_outliers[i,i]=1000robust_dist=function(x,y){qx=quantile(x,c(0.1,0.9))qy=quantile(y,c(0.1,0.9))l=x>qx[1]&xqy[1]&y

如果提供了距离方法,你也可以对字符串矩阵进行聚类。cell_fun参数会在后面进行解释。

mat_letters=matrix(sample(letters[1:4],100,replace=TRUE),10)#distanceinthASCIItabledist_letters=function(x,y){x=strtoi(charToRaw(paste(x,collapse="")),base=16)y=strtoi(charToRaw(paste(y,collapse="")),base=16)sqrt(sum((x-y)^2))}Heatmap(mat_letters,name="foo",col=structure(2:5,names=letters[1:4]),clustering_distance_rows=dist_letters,clustering_distance_columns=dist_letters,cell_fun=function(j,i,x,y,w,h,col){grid.text(mat_letters[i,j],x,y)})

创建层次聚类的方法可以通过选项clustering_method_rows和clustering_method_columns指定,可以使用hclust()函数支持的方法。

Heatmap(mat,name="foo",clustering_method_rows="single")

默认,聚类由hclust()实施。但你可以通过cluster_rows或cluster_columns指定由其他方法生成的hclust或dendrogram对象。在下面的例子中,我们使用来自cluster包的diana()和agnes()函数进行聚类。

library(cluster)Heatmap(mat,name="foo",cluster_rows=as.dendrogram(diana(mat)),cluster_columns=as.dendrogram(agnes(t(mat))))

自定义热图主体

rect_gp参数提供了热图主体的基本图形设置。

Heatmap(mat,name="foo",rect_gp=gpar(col="green",lty=2,lwd=2))

热图主体可以自定义。默认热图主体由带不同填充色的矩形数组组成(这里称为cell)。如果rect_gp中的type设置为none,整个cell数组被初始化但没有图形,然后用户可以通过cell_fun自定义他们自己的图形函数。cell_fun应用于热图的每一个cell,它需要为每一个cell提供下面的信息:

j-矩阵中的列索引

i-矩阵中的行索引

x-cell中心点的x坐标

y-cell中心点的y坐标

width-cell的宽度

height-cell的高度

fill-cell的填充色

给热图添加数值信息

Heatmap(mat,name="foo",cell_fun=function(j,i,x,y,width,height,fill){grid.text(sprintf("%.1f",mat[i,j]),x,y,gp=gpar(fontsize=10))})

(4)用ggplot2包(geom_tile函数)绘制热图

ggplot的绘图有以下几个特点:第一,有明确的起始(以ggplot函数开始)与终止(一句语句一幅图);其二,图层之间的叠加是靠“+”号实现的,越后面其图层越高。

ggplot2图的元素主要概括为:plot(整张图,包括background和title);axis(包括stick、text、title);legend(包括background、text、title);facet分为外部strip部分(background和text)和内部panel部分(background、border、网格线grid.major和grid.minor)。

几何对象函数

函数定义geom_abline线图,由斜率和截距指定geom_area

面积图(即连续的条形图)

geom_bar条形图geom_bin2d

二维封箱的热图

geom_blank空的几何对象geom_boxplot

箱线图

geom_contour轮廓图geom_crossbar

没有触须和极值点的图

geom_density

密度图

geom_density2d

二维密度图

geom_errorbar误差线(通常添加在柱状图等)geom_errorbarh

水平误差线

geom_freqpoly

频率多边形

geom_hex

六边形图

geom_histogram直方图geom_hline水平线geom_jitter点geom_line线geom_linerange区间,用竖直线表示geom_path

几何路径,由一组点按顺序连接

geom_point点geom_pointrange一条垂直线,线的中间有一个点geom_polygon多边形geom_quantile

一组分位数线

geom_rect二维的长方形geom_ribbon彩虹图(在连续的x值上表示y的范围)geom_rug触须geom_segment

线段

geom_smooth平滑的条件均值geom_step阶梯图geom_text文本geom_tile小长方形或多边形geom_vline竖直线

统计变换函数

函数定义stat_abline添加线条,用斜率和截距表示stat_bin

stat_bin2d二维密度图,用矩阵表示stat_binhex

二维密度图,用六边形表示

stat_boxplot绘制带触须的箱线图stat_contour绘制三维数据的等高线图stat_density绘制密度图stat_density2d绘制二维密度图stat_function添加函数曲线stat_identity绘制原始数据,不进行统计变换stat_qq绘制Q-Q图stat_quantile

连续的分位线

stat_smooth添加平滑曲线stat_spoke绘制有方向的数据点(由x和y指定位置,angle指定角度)stat_sum绘制不重复的取值之和stat_summary绘制汇总数据stat_unique

绘制不同的数值,去掉重复的数值

stat_vline绘制竖直线

标度函数

函数定义scale_alpha

alpha通道值(灰度)

scale_brewer

颜色标度

scale_continuous

连续标度

scale_datetime

scale_data

数据

scale_discrete离散值scale_gradient

两种颜色构建的渐变色

scale_gradient23种颜色构建的渐变色scale_gradientn

n种颜色构建的渐变色

scale_grey

灰度颜色

scale_hue

均匀色调

scale_identity

直接使用指定的取值,不进行标度转换

scale_linetype用线条模式来展示不同标度scale_manual

手动指定离散标度

scale_shape

用不同的形状来展示不同的数值

scale_size

用不同大小的对象来展示不同的数值

作图的表达公式

散点图

library('ggplot2')ggplot(mpg,mapping=aes(x=displ,y=hwy))+geom_point(colour='red')

直方图

library('ggplot2')ggplot(faithful,aes(x=waiting))+geom_histogram(binwidth=5,fill='lightblue',colour="black")

分组直方图

library('MASS')head(birthwt)birthwt$smoke=factor(birthwt$smoke)ggplot(birthwt,aes(x=bwt,fill=smoke))+geom_histogram(position="identity",alpha=0.4)

密度函数

birthwt$smoke=factor(birthwt$smoke)ggplot(birthwt,aes(x=bwt,fill=smoke))+geom_density(alpha=0.3)

library('MASS')ggplot(birthwt,aes(x=factor(race),y=bwt,fill=factor(race)))+geom_boxplot()+scale_fill_brewer(palette="Pastel2")

小提琴图

library('lattice')ggplot(singer,aes(x=voice.part,y=height))+geom_violin(fill="lightblue")+geom_boxplot(fill="red",width=.1)

组合图形

library(ggplot2)p<-ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))p+geom_point(aes(colour=Species))+stat_smooth()+labs(title="AccordingtotheSepal.Width")+theme_classic()+theme_bw()+annotate("text",x=7,y=4,parse=T,label="x[1]==x[2]",size=6,family="serif",fontface="italic",colour="red")

ggplot2的应用语法

geom

表示几何对象,它是ggplot中重要的图层控制对象。

geom_上面指定的图形属性需要呈现在一定的几何对象上才能被我们看到,承载图形属性的对象可以是点、线或bar。stat统计变换,如均值、方差。annotate

添加注释#。因为设置的文本会覆盖原来的图中对应的位置,可改变文本的透明度或颜色,例如annotate(geom=”text”,x=23,y=200,parse=T,label=”x[1]==x[2]”)

labs修改名字labs(x=“ThisisXaxis”,y=“ThisisYaxis”,title=“ThisisTitle”)scale_标度是一种函数,它控制了数学空间到图形元素空间的映射。一组连续数据可以映射到X轴坐标,也可映射到一组连续的渐变色彩。coord_

调整坐标,控制了图形的坐标轴并影响所有图形元素.调整坐标coord_flip()来翻转坐标轴。使用xlim()和ylim()来设置连续型坐标轴的最小值和最大值coord_cartesian(xlim=c(0,100),ylim=c(0,100))

guides调整所有的text。theme

调整不与数据有关的图的元素的函数。theme函数采用了四个简单地函数来调整所有的主题特征:element_text调整字体,element_line调整主题内的所有线,element_rect调整所有的块,element_blank清空。theme(panel.grid=element_blank())##删去网格线

ggplot2包需要一种较长的数据格式,我们可以用重塑的安装包创建这个数据格式。

install.packages("reshape")library("reshape")

或者,用融解函数新建一个格式。

data_melt<-melt(data)head(data_melt)

我们用ggplot2包绘画热图之前,需要加载ggplot2:

install.packages("ggplot2")library("ggplot2")

我们可以用geom_tile函数绘画默认的基础热图

ggp<-ggplot(data_melt,aes(X1,X2))+geom_tile(aes(fill=value))ggp

当然,ggplot2同样也能modify热图。可以用scale_fill_gradient参数,颜色可以自定义。

ggp+scale_fill_gradient(low="pink",high="black")

(5)用plotly包(plot_ly函数)绘制热图

Plotly是一个基于JavaScript技术的一项开源项目。JavaScript开发了多种平台的API接口,包括Python、MATLAB、Excel,提供的图像类型很丰富。

首先我们在RStudio上加载plotly包,方可运行。

install.packages("plotly")library("plotly")

plotly包含有plot_ly函数,可用来绘画指定类型的热图。

plot_ly(z=data,type="heatmap")

这个plotly包同样也提供了不少函数去修饰热图。比如可以手动调整颜色范围或用些预先定义好的函数colorscale=“Greys”。

plot_ly(z=data,colorscale="Greys",type="heatmap")

这里要特别注意的是,plotly包会把图显示在RStudio的“viewer”窗口,而不是在“plot”窗口。

plotly包的基本函数

在plotly包中,主要的绘图函数有三个:

plot_ly():用来绘制基础图形。

add_trace():用来在已有图形上添加新图形。add_xxx()函数有多种类型可供调用,如add_lines(),add_area()。

layout():用来设置图形外观,比如标题属性、横纵坐标轴属性、图例属性、图形外边距属性。

plotly包利用plot_ly函数绘制交互图。

如果想绘制交互箱线图,需要将type参数设置为box。

library(plotly)plot_ly(midwest,x=percollege,color=state,type="box")

如果你已熟悉ggplot2的绘图系统,也可以针对ggplot2绘制的对象p,利用ggplotly函数实现交互效果。例如我们想对ggplot绘制的密度图实现交互效果,执行以下代码即可:

library(plotly)p<-ggplot(data=lattice::singer,aes(x=height,fill=voice.part))+geom_density()+facet_grid(voice.part~.)(gg<-ggplotly(p))

(6)用DT包绘制热图

DT包实现R数据对象可以在HTML页面中实现过滤、分页、排序以及其他许多功能。先安装并运行DT包。

install.packages("DT")

以鸢尾花数据集iris为例,执行以下代码:

library(DT)datatable(iris)

(7)在GraphPadPrism软件绘制热图

在弹出的向导页面选择表格类型,表格类型选Grouped,选Enterorimportdataintoanewtable(如下图)。

接下来将数据粘贴到Prism的表格中,双击表格的名字(默认Data1)改为top30,如下图。

在左侧导航栏中Graphs菜单下点NewGraph...新建图表,show选择Grouped,选择HeatMap,如下图。

通过ExportGraph窗口导出所需格式的图片,如下图。这里就示范导出成pdf格式,以便日后可反复调整。

(8)在MATLAB软件绘制热图

MATLAB(MATrixLABoratory)是一款由美国MathWorks公司出品的商业数学软件。MATLAB是一个用于算法开发、数据可视化、数据分析及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能,MATLAB还可用来创建用户界面或调用其他语言(如C、C++和FORTRAN)编写的程序。MATLAB以其高效、易学易用、接口方便灵活等特性受到了广大科技人员的欢迎。

尽管MATLAB主要用于数值运算,但利用附加工具箱,它也适用于不同领域的应用。如MATLAB的生物信息学工具箱提供了序列比对与进化树构建、基因芯片数据分析、质谱数据分析和细胞过程模拟等多种功能,并且包括了丰富的应用实例,是生物信息学研究的重要分析工具。

下面我们将开始非常详细的Matlabheatmap函数语法介绍,实例引用,结果展示。首先,我们给出Matlab中关于heatmap函数的帮助文本如下:

常见用法

heatmap(tbl,xvar,yvar)heatmap(tbl,xvar,yvar,'ColorVariable',cvar)heatmap(cdata)heatmap(xvalues,yvalues,cdata)heatmap(___,Name,Value)heatmap(parent,___)h=heatmap(___)

语法说明

heatmap(tbl,xvar,yvar)基于表tbl创建一个热图。xvar输入参数指示沿x轴显示的表变量。yvar输入参数指示沿y轴显示的表变量。默认颜色基于计数聚合,这种方法计算每对x和y值一起出现在表中的总次数。heatmap(tbl,xvar,yvar,’ColorVariable’,cvar)使用cvar指定的表变量来计算颜色数据。默认的计算方法为均值聚合。heatmap(cdata)基于矩阵cdata创建一个热图。热图上的每个单元格对应cdata中的一个值。heatmap(xvalues,yvalues,cdata)指定沿x轴和y轴显示的值的标签。heatmap(___,Name,Value)使用一个或多个名称-值对组参数指定热图的其他选项。请在所有其他输入参数之后指定这些选项。heatmap(parent,___)在由parent指定的图窗、面板或选项卡上创建热图。h=heatmap(___)返回HeatmapChart对象。创建图后,使用h修改图属性。

下面给大家做一示范。基于内科病人数据表创建一个热图。

先加载patients数据集,并基于加载到工作区中的变量子集创建一个表。然后创建一个热图,计算具有一组相同Smoker和SelfAssessedHealthStatus值的患者总数。

loadpatientstbl=table(LastName,Age,Gender,SelfAssessedHealthStatus,...Smoker,Weight,Location);h=heatmap(tbl,'Smoker','SelfAssessedHealthStatus');

重新排列热图标签

创建一个热图,并重新排列y轴上的标签。

加载patients数据集,并基于这些数据创建一个热图。将HeatmapChart对象赋给变量h。

重新排列y轴上的标签。

h.YDisplayData={'Excellent','Good','Fair','Poor'};

您也可以通过将数据更改为分类数据,然后使用reordercats函数重新排列类别来重新排列标签。同样,您可以分别使用addcats、removecats或renamecats函数添加、删除或重命名热图标签。

为热图颜色指定表变量

创建一个热图,并指定用来确定热图单元格颜色的表变量。

加载patients数据集,并基于这些数据创建一个热图。通过将ColorVariable选项设置为‘Age’,使用具有一组特定Smoker和SelfAssessedHealthStatus值的患者平均年龄为每个单元格着色。

loadpatientstbl=table(LastName,Age,Gender,SelfAssessedHealthStatus,...Smoker,Weight,Location);h=heatmap(tbl,'Smoker','SelfAssessedHealthStatus','ColorVariable','Age');

使用自定义轴标签基于矩阵数据创建热图

创建一个数据矩阵。然后创建矩阵值的热图。通过将前两个输入参数指定为所需的标签,在x轴和y轴上使用自定义标签。通过设置HeatmapChart对象的属性,指定标题和轴标签。

cdata=[456032;435476;329468;239558];xvalues={'Small','Medium','Large'};yvalues={'Green','Red','Blue','Gray'};h=heatmap(xvalues,yvalues,cdata);h.Title='T-ShirtOrders';h.XLabel='Sizes';h.YLabel='Colors';

归一化每行或每列的颜色

创建一个热图,并通过设置ColorScaling属性来归一化每列或每行的颜色。

将示例文件outages.csv读入到表中。示例文件中包含表示美国电力中断事故的数据。该表包含六列:Region、OutageTime、Loss、Customers、RestorationTime...

THE END
1.sp指标的用法理想股票技术论坛SP指标是一种常用的数据分析工具,用于评估特定领域的性能指标。通过掌握SP指标的用法,可以更有效地分析数据并做出准确的决策。使用SP指标可以帮助用户快速识别潜在问题和机会,从而优化工作流程和提高效率。 ,理想股票技术论坛https://www.55188.com/tag-8749722.html
2.AI钢笔工具怎么使用方法:掌握钢笔工具的使用技巧在数字绘图和图像编辑领域工具的应用越来越广泛。其中钢笔工具作为一种强大的绘图工具受到了多设计师和艺术家的喜爱。它可以帮助客户精确地勒出图像的轮廓从而创作出更加精美、细腻的作品。本文将为您详细介绍钢笔工具的采用方法及其技巧帮助您更好地掌握这一工具,创作出更多优秀的作品。 http://www.slrbs.com/jrzg/aitong/44488.html
3.Python性能分析工具pyspy原理用法解析arm平台下使用ndk工具交叉编译python,用于android系统;android-arm平台ndk交叉编译python 上传者:qq_45683435时间:2020-09-30 欧姆龙传感器ee-spx301_401_ee-spy30_40_ds_c_4_2.pdf 欧姆龙传感器ee-spx301_401_ee-spy30_40_ds_c_4_2pdf, 上传者:weixin_38743481时间:2019-10-08 ...https://www.iteye.com/resource/weixin_38715831-13710810
4.kubectl命令行工具用法详解?kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行操作。本节对kubectl的子命令和用法进行详细说明。 2.2.1 kubectl用法概述 ?kubectl命令行的语法如下: $ kubectl [command] [TYPE] [NAME] [flags] ?其中,command、TYPE、NAME、flags的含义如下。 https://www.jianshu.com/p/8710a3a0aadd
5.哈夫节的用途与使用方法介绍管道百科管道词条管道知识哈夫节的用途与使用方法介绍 哈夫节是一种新兴的管道抢修部件,对于管道漏水很多人都束手无策,大部分人对哈夫节还不太了解哈夫节的用途,很多自来水厂和工厂有的发现管道裂缝破裂直接把管道锯断然后补上一部分进行抢修,那样既浪费人力财力,又误工误时,不是良好的抢修办法,下面我们来共同了解一下哈夫节究竟有哪些用途,...https://www.chinapipe.net/baike/knowledge/18855.html
1.SP软件全方位解析,功能亮点一网打尽!编程语言SP软件简介及功能亮点解析,,SP软件是一款功能强大的应用软件,广泛应用于多个领域。该软件具备丰富的功能,为用户提供了便捷的操作体验。SP软件主要亮点包括:,,1. 强大的数据处理能力,可快速处理大量数据并生成精确结果。,2. 多样化的工具集,满足用户在不同场景下的需求。,3. 友好的用户界面,操作简便,易于上手。,4...https://www.zovps.com/article/index.php/post/374983.html
2.SP的标准惩罚是什么?业内认可的解决方案,用户:终于不再吃亏!SP的标准惩罚是什么?业内认可的解决方案,用户:终于不再吃亏! 在现代社会中,尤其是在数字营销和互联网行业,用户常常面临着各种不公平待遇或损失。为了保护消费者的权益,行业内逐渐形成了一套针对服务提供者(Service Provider, SP)的标准惩罚机制。这篇文章将深度解析SP的标准惩罚是什么,以及业内认可的解决方案,让...http://m.cnwyb.com/yxgl/10388.html
3.Android调试工具用法详细介绍Android本文主要为大家讲解多种Android调试工具的用法。1. 查看当前堆栈1)功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系。2)方法:new Exception(“print trace”).printStackTrace();2. MethodTracing1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等。https://www.jb51.net/article/90869.htm
4.Helium10谷歌拓展程序全解,总有一款适合你!附:Helium10插件下载...Helium 10新增一款与阿里巴巴合作开发的工具,用法类似阿里巴巴的source now谷歌扩展,卖家在亚马逊上找到一个产品,点击 "source now "按钮,该程序就会把卖家引导至阿里巴巴的产品供应商。 Helium 10谷歌拓展程序怎么用? ·安装 Helium 10扩展程序仅适用于谷歌浏览器,所以要确保下载并安装该浏览器。首先确保可以科学上网,然...https://www.cifnews.com/article/105241
5.androidSp工具类本地存储androidsp存储上限④支持SP一次性自动迁移至DataStore中。 2.DataStore用法 DataStore用Kotlin语言时用法很简单,参考官网即可;对于java语言,如果不用RxJava,很难构建出DataStore对象,所以,这里使用RxJava。 ①添加依赖项 implementation 'androidx.datastore:datastore-preferences:1.0.0' ...https://blog.51cto.com/u_16099168/7862595
6.渗透过程中可能要用到的Kali工具小总结介绍 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。详情可以参见:www.nmap.org。 https://xz.aliyun.com/t/6353
7.android完整视频播放器封装库个人文章目录介绍 1.关于此视频封装库介绍 1.1 能够满足那些业务需求 1.2 对比同类型的库有哪些优势 2.关于使用方法说明 2.1 关于gradle引用说明 2.2 添加布局 2.3 最...https://segmentfault.com/a/1190000012859056/
8.Android常用控件用法Android开发语言与工具Android常用控件用法 包含Checkbox 二、RadioButton 三、ImageView 四、深入LinearLayout 五、相对布局 六、TimePicker 七、DatePicker。 六、TimePicker 七、DatePicker。 五、相对布局 六、TimePicker 七、DatePicker。 四、深入LinearLayout 五、相对布局 六、TimePicker 七、DatePicker。https://www.open-open.com/lib/view/open1386658038361.html
9.那些年我在CSDN追过的安全白帽大佬,respect网络安全工具使用集锦手册 Metasploit Framework(MSF)的使用 CobaltStrike的使用 红蓝对抗经验小结 一次完整的渗透测试流程 姜晔老师 博客地址: https://jiangye.blog.csdn.net/ 自我介绍:那一年盛夏,心愿许得无限大。 擅长领域:病毒木马查杀、逆向工程 推荐分数:★★★ 推荐理由...https://www.eet-china.com/mp/a169261.html
10.碧蓝航线换装共享功能怎么用碧蓝航线换装共享功能用法介绍碧蓝航线游戏里面换装功能一直都是游戏主要的玩法之一,不过一直都是有同名舰船拥有不同的形态虽然可以编入一个队但不能使用同个时装,不过最近官方实装了新功能,下面就让我们来看看碧蓝航线换装共享功能用法介绍。 碧蓝航线换装共享功能用法介绍 某角色好感度达到100及以上时,即可使用「换装共享角色」的普通换装。 https://a.9game.cn/bilanhangxian/7344157.html
11.代码分析工具joern的基本用法安全客代码分析工具joern的基本用法 前言 joern是一个开源的源码分析工具,来自于安全顶会S&P的14年的一篇文章。目前网上关于joern的教程大部分是旧版的,考虑到目前还没有太多新版joern的教程,于是我就写了这篇文章。 相比其他工具,joern的优势: 能够生成代码属性图(CPG)...https://www.anquanke.com/post/id/236184
12.戴铭的博客我先介绍下什么是 makefile 吧。 makefile makefile 是在目录下叫 Makefile 文件,由 make 这个命令工具进行解释执行。把源代码编译生成的中间目标文件 .o 文件,这个阶段只检测语法,如果源文件比较多,Object File 也就会多,再明确的把这些 Object File 指出来,链接合成一个执行文件就会比较繁琐,期间还会检查寻找函...http://ming1016.github.io/2021/02/21/deeply-analyse-quickjs/
13.端口扫描工具终极用法腾讯云开发者社区端口扫描工具终极用法至察助安 为什么要做c段探测,运营商分配给IDC机房地址时大部分都是连续IP地址,租给客户(渗透目标)时很大概率会分配同C段内IP地址(除非目标就一个IP地址),使用工具扫描可以探测出同段服务。 扫描工具UP主经常用的有三个: Nmap Masscan ...https://cloud.tencent.com/developer/article/2102454
14.Nmap对UDP端口扫描详解2.3 Nmap工具的基本用法 Nmap的基本用法非常简单,可以通过命令行进行操作。以下是几个常用的Nmap命令示例: # 对目标主机进行UDP端口扫描 nmap -sU target_host # 扫描特定端口范围,如1-100 nmap -sU -p 1-100 target_host # 识别UDP服务版本信息 https://wenku.csdn.net/column/643q5ub47j
15.压铆螺钉尺寸规格标准压铆螺钉使用方法介绍压铆螺钉尺寸规格标准 压铆螺钉使用方法介绍 压铆螺钉是是利用物体的斜面圆形旋转和摩擦力的物理学和数学原理,循序渐进地紧固器物机件的工具。螺钉为日常生活中不可或缺的工业必需品。压铆螺钉是通过螺纹旋入零部件体内,连接零件的。要想拔出只需将压铆螺钉旋出即可,压铆螺钉不被破坏,可以反复使用。那么压铆螺钉...https://www.qizuang.com/gonglue/wujin/64908.html
16.wm2现在很多人都拥有了WM5系统的手机,在对系统进行DIY修改的时候老是因为系统没有解锁而什么都干不了,那个2003的解锁工具SDA_ApplicationUnlock又因为2003和WM5系统不一样解锁方式不同而不能达到解锁的目的,这时我们就只能通过手动修改注册表进行解锁了,而且只能使用带特权的注册表编辑器。[SDA_ApplicationUnlock的程序对手机...https://www.douban.com/note/176448624/