Я создал диаграмму рассеяния, используя данные о longitude
и latitude
, чтобы отобразить расположение школ с различным уровнем образования для региона в Мексике.Вот код для репликации:
(Примечание: я не показываю карты для экономии места, но вы можете видеть их просто копирование, вставка и запуск в сеансе R)
library(foreach)
library(forcats)
library(ggplot2)
library(dplyr)
library(stringr)
library(raster)
library(readr)
library(reshape2)
##Load csv file
gto<- read_csv(sprintf("http://fs.planeacion.sep.gob.mx/cct/cct11.csv"))
##Educational levels (this is how levels are ordered from min to max)
nivel_ed <- c("Primaria", "Secundaria", "Bachillerato", "Superior")
##Plot
gtomap <- subset(gto, select=c(longitud, latitud, nnivel)) %>%
filter(nnivel%in%c("PRIMARIA", "SECUNDARIA", "BACHILLERATO",
"PEDAGOGICA, UNIVERSITARIA O TECNOLOGICA", "PROFESIONAL")) %>%
mutate(nnivel= case_when(nnivel== "PEDAGOGICA, UNIVERSITARIA O TECNOLOGICA" ~ "Superior",
nnivel=="PROFESIONAL" ~ "Superior",
nnivel=="SECUNDARIA" ~ "Secundaria",
nnivel=="PRIMARIA" ~ "Primaria",
nnivel=="BACHILLERATO" ~ "Bachillerato")) %>%
mutate(nnivel= factor(nnivel, levels=nivel_ed)) %>%
melt(id =c("longitud","latitud")) %>%
mutate(value= factor(value, levels=nivel_ed)) %>%
ggplot(aes(x = longitud, y = latitud, col= value)) +
geom_point() +
theme(legend.title=element_blank()) +
labs(x = "", y="")
gtomap ##To see the scatterplot
Во-вторых, я загружаю dev-версию ggplot, чтобы использовать функцию geom_sf
devtools::install_github("tidyverse/ggplot2")
В-третьих, я загружаю карту
mapgto <- sf::read_sf("http://geoinfo.iplaneg.net/geoserver/wms/kml?layers=geonode%3Amgm_gto2010&mode=download", quiet=T)
map <- data.frame(mapgto)
Карта может быть вызвана напрямую с помощью:
ggplot() +
geom_sf(data=map)
Теперь я попытался наложить эти объекты, используя:
gtomap + geom_sf(data=map)
Но эта ошибка выдается:
Error in FUN(X[[i]], ...) : object 'longitud' not found
Я пробовал много других комбинаций, используя geom_sf
без удовлетворительных результатов.Любой совет и ориентация будут высоко оценены.