sp R пакет SpatialPolygons-Class график прозрачный

Я хочу построить объекты класса 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)

работает отлично. Однако, если я хочу увеличить масштаб, метод построения 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, если это возможно)


person Chris    schedule 21.04.2016    source источник


Ответы (1)


Один из способов решить эту проблему — обрезать полигоны.

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)

Вывод выглядит следующим образом: Вывод вырезки

person loki    schedule 21.04.2016
comment
Благодарю вас! Это исправило это. Примечание. Чтобы получить такой же график, как в моем примере, необходимо расширить полигон Pclip на 4% расширение области построения по умолчанию: c1 <- Polygon(cbind(c(-0.28,7.28,7.28,-0.28, -0.28),c(-0.28,-0.28,7.28,7.28,-0.28))) и построить без ограничений. - person Chris; 22.04.2016