2016-08-13 10 views
2

私は、RasterStackからの8つのマップからなるパネルを持っており、プロットに100kmスケールバーを追加したいと考えています。私はspplot関数内でsp.layoutを使用して、SpatialLinesオブジェクトをラスタの上に追加し、スケールバー(または北矢印)で同じことが可能であると仮定しましたが、何もできません。spplotの1つのパネルに尺度バーを追加する方法

私が使用しているコードは:

library(sp) 
library(raster) 
library(grid) 

spplot(rasterstack, layout=c(2,4), 
     names.attr=c("a", "b", "c", "d", "e", "f", "g", "h"), 
     between=list(x=1, y=1), 
     at=seq(0,1000,by=100), 
     col.regions=colorRampPalette(c("grey90","yellow4","green4"))(100), 
     par.strip.text=list(cex=2.5), 
     scales=list(draw=F), 
     colorkey=list(labels=list(labels=seq(0,1,by=0.25), 
           at=seq(0,1000,by=250), 
           width=10, cex=2.5)), 
     sp.layout=list(list(country, first=FALSE), # add country borders 
         list(spatiallines, lwd=1.5, col=4))) 
# Label vertical colorkey 
grid::grid.text('Probability of occurrence', y=unit(0.5,"npc"), x=unit(0.95,"npc"), rot=90, gp=gpar(cex=3, font=2)) 
rasterstackは8層とRasterStack、及び0〜1000の各セル範囲内の値、及び country

spatiallines SpatialLinesは*

オブジェクト

私はスケールバーを追加するためのさまざまな関数を見てきました。 layout.scale.bar()maps::map.scale()scalebar()がありますが、私が使用しているspplotコードにそれらを組み込む方法はありません。私はspplotの引数として、またはsp.layout=list()引数の中のリストとしてそれらを追加しようとしましたが、いずれも動作しません。

ありがとうございます!

答えて

0

出力がSpatialPolygonsであるため、layout.scale.bar()layout.north.arrow()をお勧めします。レイアウト関数の名前は"SpatialPolygonsRescale"であり、リストの最初の引数として与える必要があります。

これは私の例です。

library(sp); library(raster); library(grid) 

### example data 
r <- raster(system.file("external/test.grd", package="raster")) 
range(r) # 178400, 181600, 329400, 334000 (xmin, xmax, ymin, ymax) 
r4 <- stack(r, r, r, r) 

### preparation of scalebar etc. 
North <- list("SpatialPolygonsRescale", layout.north.arrow(type=1), 
       offset = c(178600, 333000), scale = 800, which = 1) 

North2 <- list("SpatialPolygonsRescale", layout.north.arrow(type=2), 
       offset = c(178600, 332000), scale = 1200, fill="gray", which = 2) 

scale1 <- list("SpatialPolygonsRescale", layout.scale.bar(), 
       offset = c(180500, 329800), scale = 500, fill=c("transparent","black"), which = 3) 
s1_text0 <- list("sp.text", c(180500, 329800 + 150), "0", cex = .5, which = 3) 
s1_text1 <- list("sp.text", c(180500 + 500, 329800 + 150), "500 m", cex = .5, which = 3) 

scale2.1 <- list("SpatialPolygonsRescale", layout.scale.bar(height=0.1), 
       offset = c(178600, 333000), scale = 1000, fill=c("red", "green"), which = 4) 
s2.1_text0 <- list("sp.text", c(178600, 333000 - 150), "0", cex = .5, which = 4) 
s2.1_text1 <- list("sp.text", c(178600 + 1000, 333000 - 150), "1 km", cex = .5, which = 4) 

scale2.2 <- list("SpatialPolygonsRescale", layout.scale.bar(), 
       offset = c(178600, 333200), scale = 2000, fill=c("cyan", "violet"), which = 4) 
s2.2_text0 <- list("sp.text", c(178600, 333200 + 300), "0", cex = .5, which = 4) 
s2.2_text1 <- list("sp.text", c(178600 + 2000, 333200 + 300), "2000 m", cex = .5, which = 4) 
    # Of course, you can write 180600 instead of 178600 + 2000 

### draw 
spplot(r4, layout=c(2,2), 
     sp.layout = list(North, North2, scale1, s1_text0, s1_text1, 
         scale2.1, s2.1_text0, s2.1_text1, scale2.2, s2.2_text0, s2.2_text1)) 

enter image description here

関連する問題