chcę działkę o powierzchni, takich jak Ameryce Łacińskiej, używając pliku świat kształt z IPUMSI ...Unikanie hoizontal linie i szalone kształty podczas kreślenia map w ggplot2
https://international.ipums.org/international/resources/gis/IPUMSI_world.zip
... ja doda później więcej dzielnic IPUMS, więc naprawdę chcę użyć tego jako mojej warstwy szablonu.
Mam trudności z działką, gdy dodam ograniczenia przez coord_map
w ggplot2.
Początkowy plik przestrzenny wygląda w porządku
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")
Kiedy chcę skupić się na Ameryce Łacińskiej mam pewne niepożądane linie poziome:
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))
I próbowałem naprawić to za pomocą clipPolys
funkcji, zgodnie z wytycznymi here
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")
Nie naprawdę bardzo zadowoleni z tej działki obu. Myślałem, że to problem z otworami, jak w tym question, ale proponowane rozwiązanie daje te same wykresy jak wyżej:
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))
myślę, że to będzie wolniejszy niż ustawienie limitów w scale_continuous, ponieważ całe dane zostaną obliczone, a następnie przycięte. scale_continuous wyświetli tylko dane, które chcesz narysować. – dww
Wolniej, ale nie dostaniesz kawałków krajów. – NJBurgo
Punkt targów. Sądzę więc, że zależy to od końcowego zastosowania, które byłoby preferowane. "Brakujące" bity krajów to części, które powinieneś pominąć, ustawiając limity, które mogą być lub nie są tym, czego użytkownik chce. – dww