Evitando linhas horizontais e formas malucas ao plotar mapas no ggplot2
Quero um gráfico de uma área, como a América Latina, usando o arquivo de forma do mundo da IPUMSI ...
https://international.ipums.org/international/resources/gis/IPUMSI_world.zip
... Adicionarei mais alguns distritos do IPUMS posteriormente, para que eu realmente queira usá-lo como minha camada de modelo.
Estou tendo dificuldade com o enredo quando adiciono limites através decoord_map
no ggplot2.
O arquivo espacial inicial parece bom
library("ggplot2")
library("raster")
sd0 <- readShapePoly("./IPUMSI_world.shp")
df0 <- fortify(sd0)
ggplot(data = df0, mapping = aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "black", colour = "black")
Quando quero focar na América Latina, recebo algumas linhas horizontais indesejadas:
ggplot(data = df0, mapping = aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "black", colour = "black") +
coord_map(xlim = c(-125, -30), ylim = c(-60, 35))
Eu tentei consertar isso usando oclipPolys
função, seguindo as orientaçõesaqui
library("PBSmapping")
df1 <- df0
names(df1)[c(1,2,6,3)] <- c("X","Y","PID","POS")
df1$PID <- as.numeric(df1$PID)
df2 <- clipPolys(polys = df1, xlim = c(-125, -30), ylim = c(-60, 35), keepExtra = TRUE)
names(df2)[names(df2)=="X"] <- "long"
names(df2)[names(df2)=="Y"] <- "lat"
names(df2)[names(df2)=="PID"] <- "id"
ggplot(data = df2, mapping = aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "black", colour = "black")
Também não estou super feliz com esse enredo. Eu pensei que era um problema com buracos, como nestePergunta, questão, mas a solução sugerida produz os mesmos gráficos que acima:
gghole <- function(fort){
poly <- fort[fort$id %in% fort[fort$hole,]$id,]
hole <- fort[!fort$id %in% fort[fort$hole,]$id,]
out <- list(poly,hole)
names(out) <- c('poly','hole')
return(out)
}
ggplot(df2, aes(x=long, y=lat, group=group)) +
geom_polygon(data = gghole(df2)[[1]], fill = "black", colour = "black") +
geom_polygon(data = gghole(df2)[[2]], fill = "black", colour = "black")
ggplot(df0, aes(x=long, y=lat, group=group)) +
geom_polygon(data = gghole(df0)[[1]], fill = "black", colour = "black") +
geom_polygon(data = gghole(df0)[[2]], fill = "black", colour = "black") +
coord_map(xlim = c(-125, -30), ylim = c(-60, 35))