sp R包SpatialPolygons-Class图透明

时间:2016-04-21 14:14:04

标签: r plot polygon sp

我想用透明填充颜色绘制SpatialPolygons类的对象。从SpatialPolygons-Class的帮助页面略微更改了示例:

# simple example, from vignette("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)
plot(1,1,type="n",ylim=c(0,10),xlim=c(0,10),xlab="",ylab="",yaxt="n",xaxt="n")
plot(SpP, col = paste0(c("#FF0000","#00FF00","#0000FF"),"55"), pbg="white",add=TRUE)

工作正常。但是,如果我想放大,Map的SpatialPolygons-Class方法就不能再处理透明度了:

plot(1,1,type="n",ylim=c(0,7),xlim=c(0,7),xlab="",ylab="",yaxt="n",xaxt="n")
plot(SpP, col = paste0(c("#FF0000","#00FF00","#0000FF"),"55"), pbg="white",add=TRUE)

有没有办法让它发挥作用? (如果可能,我想保留经典的plot函数)

1 个答案:

答案 0 :(得分:2)

解决问题的一种方法是剪切多边形。

c1 <- Polygon(cbind(c(0,7,7,0, 0),c(0,0,7,7,0)))
c2 <- Polygons(list(c1), "sclip")
Pclip <- SpatialPolygons(list(c2))
library(rgeos)
SpPclip <- gIntersection(SpP, Pclip, byid = T)
plot(SpPclip, col = paste0(c("#FF0000","#00FF00","#0000FF"),"55"), pbg="white", 
     ylim = c(-1,10), xlim = c(-1,10))
plot(Pclip, add = T)

输出如下: Output of the clipping