Problema ao criar mapa com ggplot2

olá!

eu tenho um df assim:

> glimpse(wiki)
Rows: 1,580
Columns: 11
$ `Nome da Espécie` <chr> "Falco peregrinus", "Falco peregrinus", "...
$ NM_MUNICIP        <chr> "Abelardo Luz", "Aceguá", "Aceguá", "Agud...
$ Estado.y          <chr> "Santa Catarina", "Rio Grande do Sul", "R...
$ SG_ESTADO         <chr> "SC", "RS", "RS", "RS", "PB", "PB", "MA",...
$ Data              <dttm> 2020-03-06, 2015-01-21, 2018-03-25, 2020...
$ Idade             <chr> "A", "AA", "AA", "AA", "AA", "JJ", "AA", ...
$ Subespécie        <chr> "TT", "T", "T", "T", "TT", "TT", "T", "TT...
$ longitude         <dbl> -5233648238, -5416473154, -5416473154, -5...
$ latitude          <chr> "-26,56303102", "-31,8640153", "-31,86401...
$ lat               <dbl> -2656303102, -318640153, -318640153, -296...
$ long              <dbl> -5233648238, -5416473154, -5416473154, -5...

eu to tentando criar um mapa com pontinhos nessas localidades mas tá sendo o maior fracasso. eu inseri as colunas lat e long usando essa função que o athos fez:

arruma_coord <- function(coords) {
  coords <- coords %>%
    str_replace_all(",", "") %>% # troca os pontos por nada
    as.numeric() # converte o texto em numeric
}

wiki <- wiki %>%
  mutate(
    lat = arruma_coord(latitude),
    long = arruma_coord(longitude)
  ) 

aí eu tentei criar um mapa assim:

library(sf)
wiki <- st_as_sf(wiki, coords = c("lat", "long"), crs = 4326)

municipios_geobr <- geobr::read_municipality()
municipios <- st_transform(municipios_geobr,4326)
rm(municipios_geobr)

ggplot() +
  geom_sf(data=municipios) +
  geom_sf(data = wiki)

isso fica assim:

a primeira linha de Geom_sf funciona, mas com os meus dados :poop:

hoje eu percebi que tava trocando latitude e longitude, mas depois que corrigi continuou caótico. o que pode estar acontecendo??

1 Curtida

atualização:

eu tinha tirado da função a parte de dividir por 10 milhões porque retornava as coordenadas erradas, mas daí eu dividi por 100 milhões e finalmente as camadas do geom_sf se encontraram. porém continua loucura, será que algumas coordenadas na base vieram erradas?

arruma_coord <- function(coords) {
  coords <- coords %>%
    str_replace_all(",", "") %>% # troca os pontos por nada
    as.numeric() # converte o texto em numeric
  
  # retorna os valores divididos por 100 milhoes e arredonda na sexta casa decimal
  round(coords/1e8, 6) 
} 

erro2

eu fiz com um outro código também:

library(tmap)
library(rgdal)
library(rnaturalearth)
library(rnaturalearthdata)
library(rgeos)

world <- ne_countries(scale = "medium", returnclass = "sf")
class(world)

ggplot(data = world) + 
  geom_sf() + 
  geom_point(data = wiki, 
             aes(x = long , y = lat), 
             shape= 21, bg = "blue", 
             size = 2)+ 
  coord_sf(xlim = c(-75,-30), ylim = c(-35,5), expand = FALSE)+
  theme_classic()

todos

teoricamente não deveria existir nenhum pontinho fora do brasil…

1 Curtida

Olá, @Louise_Schneider!

Que bom que conseguiu avançar!

De fato, parece que as coordenadas da base estão estranhas. Isso pode ocorrer por algum problema na hora que os dados foram gerados, ou então uma diferença no sistema de coordenadas.

Seria interessante saber de onde esses dados vieram. Isso poderia ajudar a descobrir qual o problema.

Como não conheço muito de sistemas de coordenadas, estou mandando sua dúvida no t.me/rbrasiloficial. Talvez eles tenham alguma ideia melhor por lá.

1 Curtida

última atualização:

resolvido!

o problema foi na importação dos dados…

os dados foram baixados do ibge, e quando eu importei da primeira vez ficou nesse formato:

municipios_database <- read_csv("municipios_database.csv")
glimpse(municipios_database)
$ longitude  <dbl> -6.199982e+14, -6.303327e+14, -6.054431e+14...
$ latitude   <chr> "-11,9355403047646", "-9,9084628665672", "-...

eu não prestei atenção, passou um tempo e quando eu fui usar começou o drama…

pra dar certo, eu importei assim:

municipios <- read.csv("municipios_database.csv")
glimpse(municipios)
$ longitude  <chr> "-61,9998238962936", "-63,0332692780484", "...
$ latitude   <chr> "-11,9355403047646", "-9,9084628665672", "-...

e pra resolver a questão de transformar em numérica:

municipios$longitude = as.numeric(gsub(",", ".", as.character(municipios$longitude)))
municipios$latitude = as.numeric(gsub(",", ".", as.character(municipios$latitude)))

muito simples?? o r me mata

qual é a diferença entre esses dois read? faz sentido tudo isso? eu pesquisei em alguns sites mas só vejo a galera falando que o read_csv() é mais rapido que o read.csv()

obrigada julio e todos que acompanharam!

Oi Louise,

sou geógrafo e sempre me deparo com colegas com este problema. Muitos tentam abrir o CSV no excel e ele zoa muito as coordenadas, tendendo a alterar a separação de milhar, além do problema que apontou de ponto e vírgula, que é outro vilão.

O sistema de coordenada que está usando, no Brasil, tem dois dígitos antes da casa decimal. O sinal negativo informa que está no hemisfério sul (explicação sintética de forma vulgar).

Abraços.

2 Curtidas