我想将 42x42 矩阵可视化为 28 个单独的热图,每个热图都是 6x6 矩阵,其值绘制在颜色的顶部。我只需要矩阵的下半部分,我不想绘制任何被排除的东西。随后的 6x6 矩阵不应重叠,如下例所示:
d = as.matrix(read.table("http://dl.dropbox.com/u/2505196/matrix_posthoc_tukey.dat"))
d[upper.tri(d)] <- NA
d1 <- d[1:6, 1:6]
d2 <- d[1:6, 7:12]
d3 <- d[1:6, 13:18]
d4 <- d[1:6, 18:24]
#...etc, up to d28 <- d[37:42,37:42]
我用来创建单个热图的代码如下所示:
#baseline to create a separated space for all 28 plots
par(mfrow=c(4,7), mar=c(2,2,4,1), oma=c(2,4,2,2))
#using `image` to create heatmap, with color breaks defined by specific values
#the code below create just single heatmap
image(x=1:6, y=1:6, axes = FALSE, ylab="", xlab="", d1,
breaks=c(min(d1,na.rm=TRUE), -5.45, -4.65, 4.65, 5.45, max(d1,na.rm=TRUE)),
col=c("red","orange","white","orange","red"))
axis(2, 1:6, cex.axis = 0.7, las=1, tick=F)
axis(3, 1:6, cex.axis = 0.7, tick=F)
#create vertical and forizontal lines
abline(h=seq(0.5,6.5,1), v=seq(0.5,6.5,1))
#plot values from the specific matrix subset
for (i in 1:6)
{
for (j in 1:6)
{
txt <- sprintf("%0.1f", d1[i,j])
text(i, j, txt, cex=0.7)
}
}
三个这样的热图如下所示:
这就是我卡住的地方。d
每次将另一个图像添加到我的单页多热图集合时,我都必须手动更改值。我不知道如何使用上面的代码创建一个很好的循环来同时绘制这些特定的矩阵子集。
ggplot2,lattice 的替代解决方案也受到欢迎,尽管我相信这里的主要问题是制作这一系列热图的一个很好的循环。