2012-08-26 14 views
5

In R (Win64), sto provando a tracciare una combinazione di immagini raster e istogrammi in una singola finestra di stampa usando il comando layout() con una matrice che definisce il layout. Ecco alcuni esempi di codice con i dati semplificata:R - tracciare più raster utilizzando il layout a matrice

library(raster) 

r <- raster(ncols=5, nrows=5, xmn=1, xmx=5, ymn=1, ymx=5) 
rast1 <- rasterize(expand.grid(1:5,1:5), r, rnorm(25)) 
rast2 <- rasterize(expand.grid(1:5,1:5), r, rnorm(25)) 
rast3 <- rasterize(expand.grid(1:5,1:5), r, rnorm(25)) 

layout(matrix(c(1,2,3,4,1,2,3,5,1,2,3,6), 3, 4, byrow=T)) 
layout.show(6) 

plot(rast1, axes=F, ann=F, legend=F, box=F, useRaster=T) 
plot(rast2, axes=F, ann=F, legend=F, box=F, useRaster=T) 
plot(rast3, axes=F, ann=F, legend=F, box=F, useRaster=T) 
hist(rnorm(100), ann=F, axes=F) 
hist(rnorm(100), ann=F, axes=F) 
hist(rnorm(100), ann=F, axes=F) 

Come potete vedere, sto cercando di tracciare tre immagini raster (rast1, rast2, rast3) che si estendono su 1 colonna e 3 righe ciascuna, con 3 istogrammi accanto a loro , ciascuno dei quali occupa 1 colonna e 1 riga. Il comando layout.show() dà l'idea.

Quando eseguo questo codice, sembra che il primo comando di trama (raster) ripristini anche il layout della finestra del grafico, causando la stampa di tutti i grafici successivi in ​​una griglia 3x4 standard (con il quinto grafico che si sovrappone al primo) . L'impostazione del layout sembra sana, in quanto posso tracciare sei istogrammi nel layout corretto. Ma le trame raster fanno casino.

Sospetto che ci sia qualcosa nel comando plot() in {raster} che sta scherzando con il comando layout(), ma non ho idea del perché o del come. C'è un altro modo per ottenere questo layout? Un altro comando basato su raster? C'è un modo per ripristinare il layout tra i grafici raster?

Grazie in anticipo.

+0

La funzione 'plot' è in realtà una varietà di funzioni che verranno inviate sulla base della classe del primo argomento ad esso. Hai bisogno di guardare la particolare funzione per la classe dell'oggetto che stai passando ad essa. (Probabilmente 'plot.raster') –

risposta

4

Potrebbe esserci un problema tra i metodi S4 e il layout() qui. Come soluzione, sembra funzionare per sostituire plot() con image(). Invece del grafico (rast1, axes = F, ann = F, legend = F, box = F, useRaster = T), usa l'immagine (rast1, axes = F, ann = F, asp = 1) per ottenere mappe immagine quadrate.

+0

Fantastico! Funziona come un fascino. Grazie dcarlson! –

+0

Come si torna indietro alla legenda quando si utilizza l'immagine anziché la trama per il raster – jjunju

Problemi correlati