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)
}
}
このような3つのヒートマップは次のようになります。
それは私が立ち往生しているところです。d
単一ページの複数のヒートマップコレクションに別の画像を追加するたびに、手動で値を変更する必要があります。上記のコードを使用して、マトリックスの特定のサブセットを同時にプロットするための優れたループを作成する方法がわかりません。
ggplot2、latticeを使用した代替ソリューションも歓迎されますが、ここでの主な質問は、この一連のヒートマップを作成するための適切なループであると思います。