簡體   English   中英

使用R中的levelplot將不同的多邊形添加到柵格堆棧圖

[英]Adding different polygons to raster stack plot using levelplot in R

有沒有一種方法可以將其他多邊形添加到使用levelplot構建的柵格堆棧圖上? 例如,我繪制了一個由6個柵格組成的柵格堆棧。 我想為每個面板添加一個不同的多邊形。 但是,當我添加一個圖層時,該圖層將在所有六個面板上重復進行,而我嘗試添加其他多邊形的結果是也將這些多邊形也添加到了每個面板中。

#plot raster stack
levelplot(rStack, margin=F, xlab="", ylab="", 
par.settings=list(strip.background=list(col="lightgray")), 
names.attr=c("18000BP", "15000BP", "12000BP", "6000BP", "2050", "2090"),
      scales = list(draw=F))

沒有多邊形的柵格堆棧的水平圖

#plot raster stack & add polygons
levelplot(rStack, margin=F, xlab="", ylab="", 
par.settings=list(strip.background=list(col="lightgray")), 
names.attr=c("18000BP", "15000BP", "12000BP", "6000BP", "2050", "2090"),
      scales = list(draw=F)) + 
layer(sp.polygons(ice1)) + layer(sp.polygons(ice2))

添加兩個多邊形的水平圖,在所有面板上重復

這是一個使用latticeExtra::layerpackets參數的愚蠢示例。 如果願意,您可以像這樣逐層添加。

library(lattice)
library(latticeExtra)
library(sp)

Sr1 = Polygon(cbind(c(2, 4, 4, 1, 2), c(2, 3, 5, 4, 2)))
Sr2 = Polygon(cbind(c(5, 4, 2, 5), c(2, 3, 2, 2)))
Sr3 = Polygon(cbind(c(4, 4, 5, 10, 4), c(5, 3, 2, 5, 5)))
Sr4 = Polygon(cbind(c(5, 6, 6, 5, 5), c(4, 4, 3, 3, 4)), hole = TRUE)

Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1, Srs2, Srs3), 1:3)

levelplot(rnorm(10, 10) ~ 1:10 + runif(10, 1, 10) | rep(c("A", "B"),each = 5)) +
  layer(sp.polygons(SpP), packets = 1)

Imgur

您可以將ggplot2rasterVis ggplot2使用,這將為您提供更大的靈活性。 與正確參數關聯的facet_wrap將允許在柵格圖層視圖之間分隔多邊形。 為此,您將必須修改強化空間多邊形的id列以匹配柵格variable列。
這是一個可重現的示例:

library(raster)
library(rasterVis)
library(ggplot2)
library(sp)

# Raster object
fn <- system.file("external/test.grd", package="raster")
s <- stack(fn, fn)
names(s) <- c("A", "B")

# Two polygons
pol.A <- data.frame(x = c(179000, 179000, 180000, 180000),
                    y = c(330000, 331000, 331000, 330000))
pol.B <- data.frame(x = c(180000, 180000, 181000, 181000),
                    y = c(331000, 332000, 332000, 331000))
# Transform as Spatial Polygons to fit your example
pol.sp <- SpatialPolygons(list(Polygons(list(Polygon(pol.A)), "A"),
                                 Polygons(list(Polygon(pol.B)), "B")))
# Use Fortify to be able to use SpatialPolygons with ggplot2
# rename id as "variable" to correspond to rasterstack gplot output
pol.sp.fort <- fortify(pol.sp) %>%
  rename(variable = id)

# Plot. Note that gplot is not ggplot and issued from library rasterVis
gplot(s) + 
  geom_tile(aes(fill = value)) +
  geom_polygon(data = pol.sp.fort, aes(long, lat), col = "red") + 
  facet_wrap(~ variable)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM