1.首先将数据标准华为均值=1,标准差=0,使用scale()函数,并将结果转化为矩阵。
> mtscaled <- as.matrix(scale(mtcars))
2.创建热点图,去除对列重新排序的默认项。
> heatmap(mtscaled, Colv=F, scale='none')
需要说明是,默认况下,R会同时根据列和行做聚类热点图,而且会依据均值对系统树进行重新排序,Colv=F表示拒绝重新排序。如果我们的数据是时间序列等已经有序的数据,我们可能就不需要对列排序,仅需要对行聚类,这样我们可以把参数设为Colv=NA,从上图我们可以看到hp、cyl、disp的关系较近,而且马力越大,速度越快越耗油。
3.如果我们需要指定聚类数目,比如我要把上图以行聚类的第一个分支的两簇分别做图,那我们就需要hclust和cutree函数,而hclust函数必须根据距离矩阵执行
#首先以行聚类
> hc.rows <- hclust(dist(mtscaled))
#对矩阵转置,并重新以列聚类
> hc.cols <- hclust(dist(t(mtscaled)))
#对第一个分支聚类做热点图
> heatmap(mtscaled[cutree(hc.rows,k=2)==1,], Colv=as.dendrogram(hc.cols), scale='none')
对第二个分支聚类做热点图
> heatmap(mtscaled[cutree(hc.rows,k=2)==2,], Colv=as.dendrogram(hc.cols), scale='none')
如果你不喜欢这套热点图的颜色,你可以利用一下函数首先修改默认颜色再做图
> palette <- colorRampPalette(c('#f0f3ff','#0033BB'))(256)
> heatmap(mtscaled, Colv=F, scale='none', col=palette)
或者通过col参数直接设置
> heatmap(mtscaled[cutree(hc.rows,k=2)==2,], Colv=as.dendrogram(hc.cols), scale='none',col=topo.colors(100))
如果你要添加颜色图例的话你可以选择heatmap.2,它在gplot包里。
没有评论:
发表评论