ヒートマップをプロットする前にマトリックスを大幅にダウンサンプリングすることをお勧めします。各部分行列の平均値(@IaroslavDominにより示唆されるように)やって:あなたの巨大な行列で確実に
# example of big mx 10k x 10 k
bigMx <- matrix(rnorm(10000*10000,mean=0,sd=100),10000,10000)
# here we downsample the big matrix 10k x 10k to 100x100
# by averaging each submatrix
downSampledMx <- matrix(NA,100,100)
subMxSide <- nrow(bigMx)/nrow(downSampledMx)
for(i in 1:nrow(downSampledMx)){
rowIdxs <- ((subMxSide*(i-1)):(subMxSide*i-1))+1
for(j in 1:ncol(downSampledMx)){
colIdxs <- ((subMxSide*(j-1)):(subMxSide*j-1))+1
downSampledMx[i,j] <- mean(bigMx[rowIdxs,colIdxs])
}
}
# NA to disable the dendrograms
heatmap(downSampledMx,Rowv=NA,Colv=NA)
をそれがdownSampledMxを計算するためにしばらく時間がかかるだろうが、それは実現可能でなければなりません。
EDIT:
私はダウンサンプリングは、例えば、認識可能な "マクロパターン" を維持すべきだと思います次の例を参照してください。
# create a matrix with some recognizable pattern
set.seed(123)
bigMx <- matrix(rnorm(50*50,mean=0,sd=100),50,50)
diag(bigMx) <- max(bigMx) # set maximum value on the diagonal
# set maximum value on a circle centered on the middle
for(i in 1:nrow(bigMx)){
for(j in 1:ncol(bigMx)){
if(abs((i - 25)^2 + (j - 25)^2 - 10^2) <= 16)
bigMx[i,j] <- max(bigMx)
}
}
# plot the original heatmap
heatmap(bigMx,Rowv=NA,Colv=NA, main="original")
# function used to down sample
downSample <- function(m,newSize){
downSampledMx <- matrix(NA,newSize,newSize)
subMxSide <- nrow(m)/nrow(downSampledMx)
for(i in 1:nrow(downSampledMx)){
rowIdxs <- ((subMxSide*(i-1)):(subMxSide*i-1))+1
for(j in 1:ncol(downSampledMx)){
colIdxs <- ((subMxSide*(j-1)):(subMxSide*j-1))+1
downSampledMx[i,j] <- mean(m[rowIdxs,colIdxs])
}
}
return(downSampledMx)
}
# downsample x 2 and plot heatmap
downSampledMx <- downSample(bigMx,25)
heatmap(downSampledMx,Rowv=NA,Colv=NA, main="downsample x 2")
# downsample x 5 and plot heatmap
downSampledMx <- downSample(bigMx,10)
heatmap(downSampledMx,Rowv=NA,Colv=NA, main="downsample x 5")
はここ3本のヒートマップです:
申し訳ありませんが、100kのX 100kのタイルのヒートマップもそれならば、画面上に可視化する全く不可能です画像が大きく縮小され、50×50のタイルがあるはずの補間されたピクセルが1つ表示されるため、マトリックスを拡大/縮小してヒートマップを呼び出すのはなぜですか? – digEmAll
10:1の行と列のようにダウンサンプリングして描くべき意味ですか?この場合、クラスタは等しく見えますか? – kgyk1993
ええと、それは私の言いたいことです...代わりに、100個のサブマトリクスでマトリクスを分けて、それぞれをプロットすることができます。 – digEmAll