2012-08-26 10 views
5

In R (Win64), ich versuche, eine Kombination von Rasterbildern und Histogrammen in einem einzigen Plot-Fenster mit dem Layout() Befehl mit einer Matrix das Layout zu definieren. Hier ist ein Beispielcode mit vereinfachten Daten:R - Plotten mehrerer Raster mit Matrix-Layout

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) 

Wie Sie sehen können, ich versuche, drei Rasterbilder zu zeichnen (rast1, rast2, rast3), die mit 1 Spalte und 3 Reihen erstrecken jeweils mit 3 Histogrammen neben ihnen , von denen jede 1 Spalte und 1 Reihe überspannt. Der Befehl layout.show() gibt die Idee.

Wenn ich diesen Code ausführe, scheint es so, als ob der erste Plot (Raster) Befehl auch das Layout des Plotfensters zurücksetzt, wodurch alle folgenden Plots in einem 3x4 Raster plotten (wobei das 5. Plot nun den ersten überlappt) . Das Layout-Setup scheint vernünftig zu sein, da ich sechs Histogramme im richtigen Layout darstellen kann. Aber die Rasterplots vermasseln Dinge.

Ich vermute, dass etwas über den Befehl plot() in {raster} mit dem Befehl layout() zu tun hat, aber ich habe keine Ahnung warum oder wie. Gibt es eine andere Möglichkeit, dieses Layout zu erreichen? Ein anderer rasterbasierter Befehl? Gibt es eine Möglichkeit, das Layout zwischen Raster-Plots zurückzusetzen?

Vielen Dank im Voraus.

+0

Die "Plot" -Funktion ist wirklich eine Vielzahl von Funktionen, die auf der Grundlage der Klasse des ersten Arguments zu ihm gesendet werden. Sie müssen sich die spezielle Funktion für die Klasse des Objekts ansehen, an das Sie das Objekt übergeben. (Wahrscheinlich 'plot.raster') –

Antwort

4

Möglicherweise gibt es hier ein Problem zwischen den S4-Methoden und dem Layout(). Als Workaround scheint es zu funktionieren, plot() durch image() zu ersetzen. Anstatt plot (rast1, axes = F, ann = F, legende = F, box = F, useRaster = T), benutze image (rast1, axes = F, ann = F, asp = 1) um quadratische Bildkarten zu erhalten.

+0

Fantastisch! Klappt wunderbar. Danke dcarlson! –

+0

Wie erhalten Sie die Legende, wenn Sie Bild anstelle von Plot für Raster verwenden – jjunju