以下是由gplots::heatmap.2创建的我的热图示例
df<-data.frame(x1=rnorm(100),x2=rnorm(100,2,3),x3=rnorm(100,10,1),
y1=rnorm(100,5,1),y2=rnorm(100,20,5),y3=rnorm(100,30,2))
cor<-cor(df)
require(gplots)
heatmap.2(cor,trace="none",col=bluered)#fig1
heatmap.2(cor,Rowv=F,Colv=F,dendrogram="none",trace="none",col=bluered)#fig2我想在fig2中创建一个树状图,其中X和Y被手动分组在一起,这样我就可以与fig1比较相关图,其中树状图是使用距离计算的。有人知道怎么做吗?
发布于 2014-02-19 16:58:24
您可以手动创建一个树状图对象,但对我来说,这个问题让我有点不清楚为什么在图2中需要此信息。如果将所有x和y作为单独的组聚在一起的树状图添加到图2中,则树状图的分支将相互交叉,并使树状图(使用实际分支长度或高度)不可读。如果添加使用适当高度的树状图,则树状图分支长度没有意义(它们不对应于真实的相关系数),但树状图仍然告诉树的分支顺序。
无论如何,这里是如何从技术上解决这个问题的(另请参阅类似问题的Aniko's answer,在那里可以找到详细信息)。
a<-list()
a$merge<-matrix(c(-1, -2,
-4, -5,
-3, 1,
-6, 2,
3, 4), ncol=2, byrow=TRUE)
a$height<-c(0.1, 0.12, 0.12, 0.045, 0.1)
a$order<-1:6
a$labels<-c("x1", "x2", "x3", "y1", "y2", "y3")
class(a)<-"hclust"或者只使用一些合适的分支长度来获得树状图:
b<-list()
b$merge<-matrix(c(-1, -2,
-4, -5,
-3, 1,
-6, 2,
3, 4), ncol=2, byrow=TRUE)
b$height<-c(0.1, 0.1, 0.1, 0.1, 0.2)
b$order<-1:6
b$labels<-c("x1", "x2", "x3", "y1", "y2", "y3")
class(b)<-"hclust"在此之后,最终的绘图可以生成为:
heatmap.2(cor,Rowv=as.dendrogram(a),Colv=as.dendrogram(a),trace="none",col=bluered)#fig2或者:
heatmap.2(cor,Rowv=as.dendrogram(b),Colv=as.dendrogram(b),trace="none",col=bluered)#fig2https://stackoverflow.com/questions/21868529
复制相似问题