Ich schlage vor, dass Sie Ihre Matrix vor dem Plotten der Heatmap, z. dabei den Mittelwert jeder Untermatrizen (wie von @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)
Für Sie mit Ihrer großen Matrix wird es eine Weile dauern, die downSampledMx zu berechnen, aber es sollte machbar sein.
EDIT:
Ich denke, Abwärtsabtastens sollte erkennbar "Makro-Muster" erhalten, zum Beispiel siehe folgendes Beispiel:
# 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")
Hier ist die 3 Heatmaps:
Sorry, aber eine Heatmap von 100k x 100k Fliesen ist völlig unmöglich, auf einem Bildschirm sichtbar zu machen, auch wenn es funktioniert das Bild würde stark verkleinert werden und Sie werden ein interpoliertes Pixel sehen, wo es 50x50 Kacheln sein sollte ... also, warum skalieren Sie nicht die Matrix und dann Heatmap aufrufen? – digEmAll
Bedeutungen sollte ich Downsampling wie 10: 1 Zeilen und Spalten und zeichnen? In diesem Fall sieht der Cluster gleich aus? – kgyk1993
Yep, das ist was ich meine ... alternativ könnten Sie Ihre Matrix in etwa 100 Submatrizen trennen und jede von ihnen plotten ... – digEmAll