2017-06-27 2 views
0

Ich versuche, 6 rgb Bilder mit raster::plotRGB zu plotten und ich habe ein Problem, die Ränder anzupassen. Es scheint standardmäßig, plotRGB überschreibt alle par(mar) Einstellungen, die wir zuvor aufgerufen haben. Mein Ziel ist es, eine 3 * 2 symmetrische Grafik zu haben.hinzufügen Ränder zu einem PlotRGB Graph

library(raster) 
par.default <- par(no.readonly=T) 

png("c:\\temp\\img_plotRGB.png", width=6, height=9,unit="in", res=300) 
par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(1,1,1,1)) 
for(i in 1:6){ 
    r <- g <- b <- raster(ncol=10, nrow=10, res=1, crs=CRS("+init=EPSG:32198"), ext=extent(c(0,10,0,10))) 
    values(r) <- runif(ncell(r)) 
    values(g) <- runif(ncell(r)) 
    values(b) <- runif(ncell(r)) 
    rgb = rgb<-stack(r*255,g*255,b*255) 
    plotRGB(rgb) 
} 
par(par.default) 
dev.off() 

gibt, dass: enter image description here

können Sie sehen, es gibt keine Trennung zwischen zwei Graphen auf der gleichen Linie, auch wenn par(mar=c(1,1,1,1) eingestellt ist.

Wenn ich hinzufügen, die Einstellung axes=TRUE-plotRGB ich das Layout bekommen ich will, aber mit der Achse Ich will nicht:

png("c:\\temp\\img_plotRGB_axes.png", width=6, height=9,unit="in", res=300) 
par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(1,1,1,1)) 
for(i in 1:6){ 
    r <- g <- b <- raster(ncol=10, nrow=10, res=1, crs=CRS("+init=EPSG:32198"), ext=extent(c(0,10,0,10))) 
    values(r) <- runif(ncell(r)) 
    values(g) <- runif(ncell(r)) 
    values(b) <- runif(ncell(r)) 
    rgb = rgb<-stack(r*255,g*255,b*255) 
    plotRGB(rgb, axes=TRUE) 
} 
par(par.default) 
dev.off() 

enter image description here

Jede Idee, wie das erste Diagramm mit Abstand zu erhalten oder der zweite Graph ohne die Achse geschrieben?

Antwort

0

Ich habe endlich einen Hack gefunden, um es (irgendwie) zu beheben. Es ist weniger als ideal, aber ich denke wirklich, dass es ein Fehler in der Funktion ist, so gibt es keinen anderen Weg, um es zu umgehen, ohne die Funktion neu zu schreiben.

Die Idee meines fix ist ein SpatialPolygons aus dem Ausmaß des Rasters und plot es zweimal mit unterschiedlicher Breite Grenzen zu machen:

png("c:\\temp\\img_plotRGB_border.png", width=6, height=9,unit="in", res=300) 
par(mfrow=c(3,2), oma=c(0,0,0,0), mar=c(0,0,0,0)) 
for(i in 1:6){ 
    r <- g <- b <- raster(ncol=10, nrow=10, res=1, crs=CRS("+init=EPSG:32198"), ext=extent(c(0,10,0,10))) 
    values(r) <- runif(ncell(r)) 
    values(g) <- runif(ncell(r)) 
    values(b) <- runif(ncell(r)) 
    rgb = rgb<-stack(r*255,g*255,b*255) 
    plotRGB(rgb) 

### New lines! 
    plot(as(extent(c(0,10,0,10)),"SpatialPolygons"),border="black", lwd=8, add=T) 
    plot(as(extent(c(0,10,0,10)),"SpatialPolygons"),border="white", lwd=4, add=T) 
### New lines! 
} 
par(par.default) 
dev.off() 

enter image description here

Es funktioniert, aber es kann Probleme verursachen, wenn Sie möchten legend oder andere Dinge hinzufügen.

Verwandte Themen