R画图基本(四)热图 heatmap
当前位置:以往代写 > 其他教程 >R画图基本(四)热图 heatmap
2019-06-14

R画图基本(四)热图 heatmap

R画图基本(四)热图 heatmap

我们在阐明白差别表达数据之后,常常要生成一种直观图--热图(heatmap)。这一节就以基因芯片数据为例,示例生成高品质的热图。

好比

R绘图根基(四)热图 heatmap

钢蓝渐白配色的热图

首先照旧从最简朴的heatmap开始。

> library(ggplot2)
> library(ALL) #可以利用biocLite("ALL")安装该数据包
> data("ALL")
> library(limma)
> eset<-ALL[,ALL$mol.biol %in% c("BCR/ABL","ALL1/AF4")]
> f<-factor(as.character(eset$mol.biol))
> design<-model.matrix(~f)
> fit<-eBayes(lmFit(eset,design)) #对基因芯片数据举办阐明,获得差别表达的数据
> selected  <- p.adjust(fit$p.value[, 2]) <0.001 
> esetSel <- eset[selected,] #选择个中一部门绘制热图
> dim(esetSel) #从这标准上看,数目并不多,但也不少。假如基因数过多,可以分两次做图。
Features  Samples 
      84       47 
> library(hgu95av2.db)
> data<-exprs(esetSel)
> probes<-rownames(data)
> symbol<-mget(probes,hgu95av2SYMBOL,ifnotfound=NA)
> symbol<-do.call(rbind,symbol)
> symbol[is.na(symbol[,1]),1]<-rownames(symbol)[is.na(symbol[,1])]
> rownames(data)<-symbol[probes,1] #给每行以基因名替换探针名定名,在绘制热图时直接显示基因名。
> heatmap(data,cexRow=0.5)

R绘图根基(四)热图 heatmap

利用heatmap函数默认颜色生成的热图

这个图有三个部门,样品分枝树图和基因分枝树图,以及热图自己。之所以对样品举办聚类阐明排序,是因为这次的样品自己并没有分组。假如有分组的话,那么可以封锁对样品的聚类阐明。对基因举办聚类阐明排序,主要是为了色块悦目,其实可以选择不排序,可能利用GO聚类阐明排序。上面的这种热图,利便简朴,结果很是不错。

接下来我们假设样品是分好组的,那么我们想用差异的颜色来把样品组标志出来,那么我们可以利用ColSideColors参数来实现。同时,我们但愿改观热图的渐变填充色,可以利用col参数来实现。

> color.map <- function(mol.biol) { if (mol.biol=="ALL1/AF4") "#FF0000" else "#0000FF" }
> patientcolors <- unlist(lapply(esetSel$mol.bio, color.map))
> heatmap(data, col=topo.colors(100), ColSideColors=patientcolors, cexRow=0.5)

R绘图根基(四)热图 heatmap

利用heatmap函数top.colors填充生成的热图

在heatmap函数中,样品分组只能有一种,假如样品分组有多次分组怎么办?heatmap.plus就是来办理这个问题的。它们的参数都一致,除了ColSideColors和RowSideColors。heatmap利用是一维数组,而heatmap.plus利用的是字符矩阵来配置这两个参数。

> library(heatmap.plus)
> hc<-hclust(dist(t(data)))
> dd.col<-as.dendrogram(hc)
> groups <- cutree(hc,k=5)
> color.map <- function(mol.biol) { if (mol.biol=="ALL1/AF4") 1 else 2 }
> patientcolors <- unlist(lapply(esetSel$mol.bio, color.map))
> col.patientcol<-rbind(groups,patientcolors)
> mode(col.patientcol)<-"character"
> heatmap.plus(data,ColSideColors=t(col.patientcol),cexRow=0.5)

R绘图根基(四)热图 heatmap

利用heatmap.plus绘制热图

这样画图的不敷是没有热图色key值。gplots中的heatmap.2为我们办理了这个问题。并且它带来了更多的预设填充色。下面就是几个例子。

> library("gplots")
> heatmap.2(data, col=redgreen(75), scale="row", ColSideColors=patientcolors,
+            key=TRUE, symkey=FALSE, density.info="none", trace="none", cexRow=0.5)

R绘图根基(四)热图 heatmap

利用heatmap.2函数,readgreen渐变色填充生成的热图

> heatmap.2(data, col=heat.colors(100), scale="row", ColSideColors=patientcolors,
+            key=TRUE, symkey=FALSE, density.info="none", trace="none", cexRow=0.5)
> heatmap.2(data, col=terrain.colors(100), scale="row", ColSideColors=patientcolors,
+            key=TRUE, symkey=FALSE, density.info="none", trace="none", cexRow=0.5)
> heatmap.2(data, col=cm.colors(100), scale="row", ColSideColors=patientcolors,
+            key=TRUE, symkey=FALSE, density.info="none", trace="none", cexRow=0.5)
> heatmap.2(data, col=redblue(100), scale="row", ColSideColors=patientcolors,
+            key=TRUE, symkey=FALSE, density.info="none", trace="none", cexRow=0.5)
> heatmap.2(data, col=colorpanel(100,low="white",high="steelblue"), scale="row", ColSideColors=patientcolors,
+            key=TRUE, keysize=1, symkey=FALSE, density.info="none", trace="none", cexRow=0.5)

R绘图根基(四)热图 heatmap

利用heatmap.2函数,heat.colors渐变色填充生成的热图

R绘图根基(四)热图 heatmap

利用heatmap.2函数,terrain.colors渐变色填充生成的热图

R绘图根基(四)热图 heatmap

利用heatmap.2函数,cm.colors渐变色填充生成的热图

R绘图根基(四)热图 heatmap

利用heatmap.2函数,redblue渐变色填充生成的热图

R绘图根基(四)热图 heatmap

利用heatmap.2函数,colorpanel渐变色填充生成的热图

#p#分页标题#e#

然而,以上的heatmap以及heatmap.2固然利便简朴,结果也很不错,可以利用colorpanel利便的配置渐变填充色,可是它的机关没有步伐改变,生成的结果图显得有点机械,不简捷。为此这里先容如何利用ggplot2傍边的geom_tile来为基因芯片绘制抱负的热图。

> library(ggplot2)
> hc<-hclust(dist(data))
> rowInd<-hc$order
> hc<-hclust(dist(t(data)))
> colInd<-hc$order
> data.m<-data[rowInd,colInd] #聚类阐明的浸染是为了色块会合,显示结果好。假如自己就对样品有分组,
基因有排序,就可以跳过这一步。
> data.m<-apply(data.m,1,rescale) #以行为基准对数据举办调动,使每一行都酿成[0,1]之间的数字。
调动的要领可以是scale,rescale等等,凭据本身的需要来调动。
> data.m<-t(data.m) #调动今后转置了。
> coln<-colnames(data.m) 
> rown<-rownames(data.m) #生存样品及基因名称。因为geom_tile会对它们按坐标重排,
所以需要利用数字把它们的序列牢靠下来。
> colnames(data.m)<-1:ncol(data.m)
> rownames(data.m)<-1:nrow(data.m)
> data.m<-melt(data.m) #转换数据成适合geom_tile利用的形式
> head(data.m)
  X1 X2     value
1  1  1 0.1898007
2  2  1 0.6627467
3  3  1 0.5417057
4  4  1 0.4877054
5  5  1 0.5096474
6  6  1 0.2626248
> base_size<-12 #配置默认字体巨细,依照样品可能基因的几多而微变。
> (p <- ggplot(data.m, aes(X2, X1)) + geom_tile(aes(fill = value), #设定横坐标为以前的列,
纵坐标为以前的行,填充色为转换后的数据
+      colour = "white") + scale_fill_gradient(low = "white", #设定渐变色的低值为白色,变值为钢蓝色。
+      high = "steelblue"))
> p + theme_grey(base_size = base_size) + labs(x = "", #配置xlabel及ylabel为空
+      y = "") + scale_x_continuous(expand = c(0, 0),labels=coln,breaks=1:length(coln)) + #配置x坐标扩展部门为0,
刻度为之前的样品名
+      scale_y_continuous(expand = c(0, 0),labels=rown,breaks=1:length(rown)) + opts( #配置y坐标扩展部门为0,
刻度为之前的基因名
+      axis.ticks = theme_blank(), axis.text.x = theme_text(size = base_size *  #配置坐标字体为基准的0.8倍,
贴近坐标对节,x坐标旋转90度,色彩为中灰
+      0.8, angle = 90, hjust = 0, colour = "grey50"), axis.text.y = theme_text(
+      size = base_size * 0.8, hjust=1, colour="grey50"))

R绘图根基(四)热图 heatmap

利用ggplot2中geom_tile函数,钢蓝渐白配色的热图

#p#分页标题#e#

也可以很轻松的实现传统渐变填充色,红黄渐变。

> (p <- ggplot(data.m, aes(X2, X1)) + geom_tile(aes(fill = value),
+      colour = "white") + scale_fill_gradient(low = "yellow",
+      high = "red"))
> p + theme_grey(base_size = base_size) + labs(x = "",
+      y = "") + scale_x_continuous(expand = c(0, 0),labels=coln,breaks=1:length(coln)) +
+      scale_y_continuous(expand = c(0, 0),labels=rown,breaks=1:length(rown)) + opts(
+      axis.ticks = theme_blank(), axis.text.x = theme_text(size = base_size *
+      0.8, angle = 90, hjust = 0, colour = "grey50"), axis.text.y = theme_text(
+      size = base_size * 0.8, hjust=1, colour="grey50"))

R绘图根基(四)热图 heatmap

利用ggplot2中geom_tile函数,红黄渐变填充的热图

利用红绿渐变填充。

> (p <- ggplot(data.m, aes(X2, X1)) + geom_tile(aes(fill = value),
+      colour = "white") + scale_fill_gradient(low = "green",
+      high = "red"))
> p + theme_grey(base_size = base_size) + labs(x = "",
+      y = "") + scale_x_continuous(expand = c(0, 0),labels=coln,breaks=1:length(coln)) +
+      scale_y_continuous(expand = c(0, 0),labels=rown,breaks=1:length(rown)) + opts(
+      axis.ticks = theme_blank(), axis.text.x = theme_text(size = base_size *
+      0.8, angle = 90, hjust = 0, colour = "grey50"), axis.text.y = theme_text(
+      size = base_size * 0.8, hjust=1, colour="grey50"))

R绘图根基(四)热图 heatmap

利用ggplot2中geom_tile函数,红绿渐变填充的热图

利用绿白渐变填充。

> (p <- ggplot(data.m, aes(X2, X1)) + geom_tile(aes(fill = value),
+      colour = "white") + scale_fill_gradient(low = "seagreen",
+      high = "white"))
> p + theme_grey(base_size = base_size) + labs(x = "",
+      y = "") + scale_x_continuous(expand = c(0, 0),labels=coln,breaks=1:length(coln)) +
+      scale_y_continuous(expand = c(0, 0),labels=rown,breaks=1:length(rown)) + opts(
+      axis.ticks = theme_blank(), axis.text.x = theme_text(size = base_size *
+      0.8, angle = 90, hjust = 0, colour = "grey50"), axis.text.y = theme_text(
+      size = base_size * 0.8, hjust=1, colour="grey50"))

R绘图根基(四)热图 heatmap

利用ggplot2中geom_tile函数,绿白渐变填充的热图


12下一页

    关键字:

在线提交作业