with pretty plotting mapas ggplot for con and r class ggplot2 spatial

pretty - r map with coordinates



Extrae las coordenadas de la característica de SpatialPolygons y otras clases sp (1)

Package sp proporciona varias clases para diferentes conceptos espaciales (puntos, líneas, polígonos). Para algunas clases, acceder a las coordenadas de las funciones es sencillo, por ejemplo, SpatialLines . Todos los ejemplos fueron tomados de las respectivas páginas de ayuda de clase.

l1 = cbind(c(1,2,3),c(3,2,2)) l1a = cbind(l1[,1]+.05,l1[,2]+.05) l2 = cbind(c(1,2,3),c(1,1.5,1)) Sl1 = Line(l1) Sl1a = Line(l1a) Sl2 = Line(l2) S1 = Lines(list(Sl1, Sl1a), ID="a") S2 = Lines(list(Sl2), ID="b") Sl = SpatialLines(list(S1,S2)) coordinates(Sl) # [prints a list of two with corresponding segments]

Para los Polígonos SpatialPolygons , las coordinates() devuelven centros de polígono como se muestra a continuación.

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) coordinates(SpP) [,1] [,2] [1,] 2.696970 3.545455 [2,] 3.666667 2.333333 [3,] 6.133333 3.933333

¿Hay alguna función útil en los paquetes comunes que extraiga las coordenadas de las funciones? He creado una función para SpatialPolygons , pero estoy buscando algo que haya sido mejor probado y consistente, tal vez incluso en la mayoría de las clases sp .

getEdges <- function(x) { stopifnot(class(x) == "SpatialPolygons") lapply(x@polygons, function(y) { y@Polygons[[1]]@coords }) } getEdges(SpP) # [returns a list of three, coordinates in a matrix]


La mejor forma en que puedo pensar es usar la función ggplot2 de ggplot2 . fortify es una función genérica que tiene métodos para convertir objetos R genéricos (por ejemplo, lm , etc.) en un data.frame que ggplot2 puede usar para trazar. Una lista completa da:

> ggplot2:::fortify. ggplot2:::fortify.cld ggplot2:::fortify.confint.glht ggplot2:::fortify.data.frame ggplot2:::fortify.default ggplot2:::fortify.glht ggplot2:::fortify.Line ggplot2:::fortify.Lines ggplot2:::fortify.lm ggplot2:::fortify.map ggplot2:::fortify.NULL ggplot2:::fortify.Polygon ggplot2:::fortify.Polygons ggplot2:::fortify.SpatialLinesDataFrame ggplot2:::fortify.SpatialPolygons ggplot2:::fortify.SpatialPolygonsDataFrame ggplot2:::fortify.summary.glht

Puedes ver que esto incluye una función de fortify para objetos SpatialPolygons* . Usando sus datos de ejemplo:

> obj = fortify(SpP) long lat order hole piece group id 1 2 2 1 FALSE 1 s1.1 s1 2 1 4 2 FALSE 1 s1.1 s1 3 4 5 3 FALSE 1 s1.1 s1 4 4 3 4 FALSE 1 s1.1 s1 5 2 2 5 FALSE 1 s1.1 s1 6 5 2 1 FALSE 1 s2.1 s2 7 2 2 2 FALSE 1 s2.1 s2 8 4 3 3 FALSE 1 s2.1 s2 9 5 2 4 FALSE 1 s2.1 s2 10 4 5 1 FALSE 1 s3/4.1 s3/4 11 10 5 2 FALSE 1 s3/4.1 s3/4 12 5 2 3 FALSE 1 s3/4.1 s3/4 13 4 3 4 FALSE 1 s3/4.1 s3/4 14 4 5 5 FALSE 1 s3/4.1 s3/4 15 5 4 6 TRUE 2 s3/4.2 s3/4 16 5 3 7 TRUE 2 s3/4.2 s3/4 17 6 3 8 TRUE 2 s3/4.2 s3/4 18 6 4 9 TRUE 2 s3/4.2 s3/4 19 5 4 10 TRUE 2 s3/4.2 s3/4

y trazando el resultado:

require(ggplot2); theme_set(theme_bw()) ggplot(aes(x = long, y = lat, group = group), data = obj) + geom_path()