Łączenie wielu złożonych wykresów jako paneli na jednym rysunku

Wprowadzenie przez @backlin

Wiele prostych wykresów można łączyć jako panele w jedną figurę, używająclayout lubpar(mfrow=...). Jednak bardziej złożone wykresy mają tendencję do ustawiania własnego układu paneli wewnętrznie, uniemożliwiając ich użycie jako paneli. Czy istnieje sposób na utworzenie zagnieżdżonego układu i zamknięcie złożonego wykresu w jednym panelu?

Mam przeczuciegrid pakiet może to osiągnąć, np. kreśląc panele w oddzielnych rzutniach, ale nie udało nam się dowiedzieć, jak to zrobić. Oto przykład zabawki, aby zademonstrować problem:

my.plot <- function(){
    a <- matrix(rnorm(100), 10, 10)
    plot.new()
    par(mfrow=c(2,2))
    plot(1:10, runif(10))
    plot(hclust(dist(a)))
    barplot(apply(a, 2, mean))
    image(a)
}
layout(matrix(1:4, 2, 2))
for(i in 1:4) my.plot()
# How to avoid reseting the outer layout when calling `my.plot`?
Oryginalne pytanie @alittleboy

używamheatmap.2 funkcja wgplots pakiet do generowania map ciepła. Oto przykładowy kod pojedynczej mapy ciepła:

library(gplots)
row.scaled.expr <- matrix(sample(1:10000),nrow=1000,ncol=10)
heatmap.2(row.scaled.expr, dendrogram ='row',
          Colv=FALSE, col=greenred(800), 
          key=FALSE, keysize=1.0, symkey=FALSE, density.info='none',
          trace='none', colsep=1:10,
          sepcolor='white', sepwidth=0.05,
          scale="none",cexRow=0.2,cexCol=2,
          labCol = colnames(row.scaled.expr),                 
          hclustfun=function(c){hclust(c, method='mcquitty')},
          lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),                 
)

Ponieważ jednak chcę porównać wiele map ciepła w jednym wykresie, używampar(mfrow=c(2,2)) a następnie zadzwońheatmap.2 cztery razy, tj.

row.scaled.expr <- matrix(sample(1:10000),nrow=1000,ncol=10)
arr <- array(data=row.scaled.expr, dim=c(dim(row.scaled.expr),4))
par(mfrow=c(2,2))
for (i in 1:4)
heatmap.2(arr[ , ,i], dendrogram ='row',
          Colv=FALSE, col=greenred(800), 
          key=FALSE, keysize=1.0, symkey=FALSE, density.info='none',
          trace='none', colsep=1:10,
          sepcolor='white', sepwidth=0.05,
          scale="none",cexRow=0.2,cexCol=2,
          labCol = colnames(arr[ , ,i]),                 
          hclustfun=function(c){hclust(c, method='mcquitty')},
          lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),                 
)

Jednak wynik NIE jest czterema mapami ciepła na jednym wykresie, ale czterema oddzielnymi mapami ciepła. Innymi słowy, jeśli używampdf() aby uzyskać wynik, plik ma cztery strony zamiast jednej. Czy muszę gdzieś zmienić jakieś parametry? Dziękuję bardzo!

questionAnswers(4)

yourAnswerToTheQuestion