2012-08-26 15 views
5

W R (Win64) próbuję narysować kombinację obrazów rastrowych i histogramów w jednym oknie wydruku za pomocą polecenia layout() z macierzą definiującą układ. Oto niektóre przykładowy kod z uproszczonej danych:R - wykreślanie wielu rastrów przy użyciu układu macierzy

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) 

Jak widać, staram się wykreślić trzy obrazy rastrowe (rast1, rast2, rast3), które obejmują 1 kolumnę i 3 rzędy, każdy z 3 histogramy obok nich , z których każdy obejmuje 1 kolumnę i 1 wiersz. Komenda layout.show() daje pomysł.

Po uruchomieniu tego kodu wydaje się, że pierwsze polecenie wydruku (rastrowe) również resetuje układ okna wykresu, powodując, że wszystkie kolejne wykresy są drukowane w standardowej siatce 3x4 (przy czym piąta działka nakłada się teraz na pierwszą) . Wygląda na to, że układ układu wygląda dobrze, ponieważ mogę sporządzić sześć histogramów we właściwym układzie. Ale wykresy rastrowe majaczyły.

Podejrzewam, że jest coś w komendzie plot() w {rastrowe}, które miesza się z poleceniem layout(), ale nie mam pojęcia, dlaczego i jak. Czy jest jakiś inny sposób na osiągnięcie tego układu? Kolejna komenda rastrowa? Czy jest jakiś sposób na zresetowanie układu między działkami rastrowymi?

Z góry dziękuję.

+0

Funkcja "działka" to tak naprawdę wiele funkcji, które zostaną wysłane w oparciu o klasę pierwszego argumentu. Musisz przyjrzeć się konkretnej funkcji klasy obiektu, który do niej przechodzisz. (Prawdopodobnie "plot.raster") –

Odpowiedz

4

Może występować problem między metodami S4 a układem() tutaj. W celu obejścia problemu wydaje się, że zastąpienie plot() obrazem(). Zamiast wykresu (rast1, osie = F, ann = F, legenda = F, box = F, useRaster = T), użyj obrazu (rast1, osie = F, ann = F, asp = 1), aby uzyskać kwadratowe mapy obrazów.

+0

Fantastyczne! Działa jak marzenie. Dzięki, Dcarlson! –

+0

Jak odzyskać legendę, gdy używasz obrazu zamiast wykresu dla rastra – jjunju