Como fazer um mapa no R

Este é o post de estreia da Renata, nossa nova colaboradora. Que tal aprender a fazer mapas básicos no R?

Kia ora pessoal,

Meu nome é Renata Muylaert e a partir de agora faço parte do time Sobrevivendo na Ciência! Obrigada, Marco e Alexandre, pelo convite!

Quem me conhece sabe o quanto eu amo mapas! E quem está elaborando projetos de pesquisa em diversas áreas (a minha é a Ecologia) sabe o quão valioso pode ser um mapa para o planejamento da coleta de dados e para a interpretação dos resultados.

Mas fazer um mapa não é tão trivial. É comum ter dificuldade para entender coordenadas geográficas, formatos de dados espaciais e até mesmo a portabilidade dos mesmos. Pegar os pontos que você marcou com um GPS em campo e, a partir deles, plotar um mapa eficiente e bonito pode ser um caminho longo.

Neste post não vou focar nas bases da cartografia e dos sistemas de coordenadas geográficas (fica para outro post; você pode ler o básico aqui). Este post é para quem quer sentar e fazer um mapa rapidamente no R com o mínimo de sofrimento possível.

Como exemplo, vou explicar como plotar em um mapa, com direito a grade, escala e norte, alguns locais que visitei na Nova Zelândia (🇳🇿), um país incrível no qual eu tive oportunidade de fazer parte do meu doutorado. Você pode adaptar este script para plotar os pontos de coleta da sua tese ou outros dados similares.

Começando

Se você já tem experiência no R, basta baixar o repositório que eu criei no GitHub, plotar o mapa a partir do script comentado e adaptá-lo para os seus dados e gostos.

Se você for mais noob, recomendo que leia com atenção o post inteiro e os comentários no script.

Coordenadas (latitude e longitude)

Suponhamos que você pegou as coordenadas no sistema mais comumente utilizado, o WGS 84. As informações espaciais serão compostas de no mínimo três colunas: latitude, longitude e identificação do ponto.

Embora sejam somente três inocentes colunas, muitas vezes dados espaciais acabam apresentando intrusões demoníacas após saírem do GPS ou de uma tabela fonte. Ao serem colados nos comumente utilizados MS Excel ou LibreOffice Calc, os dados podem ficar completamente zicados. Isso ocorre se você não especifica corretamente se seu separador decimal é ponto ou vírgula, o que pode depender do Idioma do seu sistema operacional. Quem já tiver passado por isso, comente aqui no post!

Neste exemplo, eu utilizo um arquivo de bloco de notas (.txt) separado somente e somente só por vírgulas (,) como input de coordenadas. E o separador decimal é ponto (.). O Excel em português costuma não entender coordenadas separadas por pontos e “zoa” todos seus dados rapidamente. Portanto, tenha muita paciência ao formatar as suas planilhas. É incrível como até pessoas com anos de experiência trabalhando com dados espaciais podem ainda passar por esses mesmos apertos.

Enfatizo, não tenha pressa para abrir os dados no R. Outro problema bastante comum é a simples troca da coluna da latitude pela da longitude. Essa troca é resultado de: (1) pressa; (2) falta de familiaridade do usuário (no caso você!) com coordenadas geográficas; (3) falta de familiaridade da pessoa que te enviou a planilha com coordenadas geográficas; ou (4) ausência de revisão minuciosa dos dados.

O que mais pode atrapalhar

Garantindo essa etapa principal, provavelmente o resto do script funcionará. Caso contrário, outro possível problema é a sua versão do R ser antiga demais. E repare que “antiga demais” pode não ser tão antiga assim. No momento presente, já vi que tem duas versões do R mais novas do que a que eu estou usando. Às vezes, basta uma atualização menor do R para um script perder parte da compatibilidade quando os pacotes não acompanham a atualização.

No script do exemplo, o pacote ggsn pode não funcionar caso você tenha uma versão antiga do R. No exemplo aqui utilizei o R 3.5.1 (“Feather Spray”) e a nova versão do ggsn (v0.5.0). Caso você tenha problemas em carregar este pacote seguindo o script, reporte aqui! E caso funcione bem, comente também, é importante pra gente. 🙂

Resultado final

Sem delongas, o resultado final do script segue logo abaixo. Você pode customizá-lo para ficar do seu gosto: mudar cores, transparência, tema, posição e unidade de escala e norte.

Gostou do resultado? O que você mudaria nesse mapa? Boa sorte com seus futuros mapas e até o próximo post!

 

mapa_simples

Agradecimentos

Agradeço ao Marco, pois o último mapa que construímos para um artigo me levou a escrever esse post. Agradeço também ao Oswaldo Baquero pela construção do pacote ggsn para R. E agradeço ao Miltinho por me introduzir ao mundo dos mapas.

Observação

Quem estiver usando Linux como sistema operacional e tiver problemas para executar os comandos, por favor cheque os comentários desse post.

Material adicional

A pedidos, clique neste link para acessar um script em R para plotar o mapa do Nordeste do Brasil utilizando o pacote “brazilmaps”.

(Fonte da image destacada)

 

32 respostas para “Como fazer um mapa no R”

  1. Olá, tudo bem? Consegui plotar os mapas e adaptar para o que eu queria, porém não consigo rodar o pacote ggsn, o que eu posso fazer? (utilizo a versão mais atual do R)

    1. Bom dia Ágatha,

      tudo bom? Você conseguiu instalar o pacote, mas não conseguiu carregá-lo? Qual erro foi apontado pelo R?

      Você pode instalar o pacote usando esse código aqui, caso seu Rtools não esteja funcionando:

      install.packages(“githubinstall”)
      githubinstall::githubinstall(“oswaldosantos/ggsn”)

  2. Oi, Re! Super massa e super util o post!
    Eu tentei baixar o brazilmaps mas sempre saia a mensagem que não estava disponível para a versão do R que eu tinha. Atualizei o R, atualizei o Rstudio e o mesmo.
    Depois descobri que o pacote brazilmaps foi removido do repositorio CRAN. Agora só é possível baixá-lo pelo arquivo, ou pelo devtools::install_github(“rpradosiqueira/brazilmaps”).
    Vou trabalhar tentando usar esse pacote, obrigada pelas super dicas!
    Beijos!!

  3. Olá Renata, obrigado por compartilhar conhecimento!
    Segui todos os passos sem apresentar qualquer erro. No entanto, lá no final quando executei o “plot(g)” apareceu a seguinte mensagem:
    Error in FUN(X[[i]], …) : objeto ‘long’ não encontrado
    Sei que é algo no código mas não consigo identificar.

  4. Boa noite, Renata!
    Obrigada pelas dicas, são muito úteis!
    Gostaria de saber se é possível colocar nesse mapa do Brasil as linhas das fronteiras entre estados e se eu consigo fazer alguma diferenciação de cor por região.
    Consegui colocar as linhas das fronteiras estaduais no mapa que você disponibilizou para a região nordeste, mas nele não consigo alocar meus pontos!
    Muito obirgada novamente por compartilhar esse conhecimento tão valioso!

    1. Oi Ligia,

      Imagina, que bom que te ajudou!
      Você precisa usar a função geom_point() par adicionar seus pontos no mapa. Se não der certo assim, me fala!

      abs,

      1. Oi, Renata. Muito obrigado pela resposta e consideração. Sou bastante leigo no assunto e estou precisando desenvolver um mapa do nordeste para a distribuição de um fenômeno. Não estou sabendo como inserir meus dados nesse script do nordeste que você mandou. Tenho que colar no outro script? Se sim, em qual parte? O que eu tenho que alterar? Desde já, grato pela atenção.

        1. Oi Manoel, você precisa adaptar esse script aos seus dados, sim, alterando os dados correspondentes ao exemplo.

          Bom trabalho aí!

  5. Olá Renata, tudo bom? Eu gostaria de plotar pontos em uma imagem de satélite do GoogleMaps, você poderia me ajudar?

  6. Oi Renata, obrigada pelo excelente post. Estou encontrando problemas para plotas meus dados do Brasil. O erro que estou recebendo é:

    Error: ‘BrazilMapEnv’ is not an exported object from ‘namespace:maps’

    Você já teve algum erro semelhante?

    Eu fiz algumas buscas na internet, mas ainda não consegui solucionar.

    Um abraço,

    1. Oi Simone,

      para fazer o mapa do Brasil use o seguinte código para o objeto area:
      area <-map_data("world", region="Brazil", zoom=5)

      abraços! Conta pra gente se deu certo depois!

  7. Juliana, primeiramente muito obrigado e parabéns pelo post “direto ao ponto”! Ficou muito bom.
    Gerei meu mapa, mas não consigo adicionar a seta Norte nem a escala.
    Não consegui instalar o pacote devtools, então tentei installar o”ggsn” utilzando o “install.packages”. Aparentemente a instalação dá certo, mas quando vou utilizar aparece a mensagem que não existe tal pacote (isso ocorre tanto pro devtools quanto pro ggsn).
    Estou utilizando o R versão 3.5.2 (“Eggshell Igloo”) no sistema Linux Ubuntu 18.04.2.

    1. Olá Pedro,

      Você tentou instalar o devtools? Para Linux você pode usar esse código:
      devtools::install_github(“hadley/devtools”)

      abs

      1. Sim, tentei com este código também e não funciona. Me aparece a seguinte mensagem:

        “Error in loadNamespace(name) : there is no package called ‘devtools’”

        Imagino que seja algum conflito de biblioteca, mas não consegui solucionar.

    2. Olá Pedro,

      Como não uso Linux, não sei mesmo o que pode ser.
      Tenta pelo R GUI normal (fora do RStudio) utilizando
      install.packages(“devtools”)
      e depois comenta aqui!

      1. Obrigado Renata. Também tentei pela instalação normal com install.packages (“devtools”, dependencies =TRUE)
        O R acusa que foi instalado, mas não carrega quando solicito, o que me leva a crer que por algum motivo o R está instalando esse (e alguns outros) pacotes em uma pasta diferente dos demais pacotes. Talvez algum resquício de uma versão anterior que tinha instalada do R no meu sistema.

        Depois vou ver isso com mais calma e posto por aqui, mas se você ou alguém descobrir antes uma solução estarei de olho.

          1. Oi Renata, os primeiros passos deste link ajudaram muito! Consegui instalar o devtools, o que era o 1o passo para solucionar essa questão. Depois tive que seguir mais alguns passos pelo terminal para conseguir instalar o ggsn sem erros:

            1) Sair do R e instalar ‘libudunits2’ na raiz do sistema com o cmd: sudo apt-get install libudunits2-dev

            2) Abrir o R novamente e instalar o pacote ‘units’ e suas dependencias com o cmd: install.packages (‘units’, dependencies = TRUE)

            3) Finalmente, instalar o ‘ggsn’ como vc já havia orientado: devtools::install_github(“oswaldosantos/ggsn”)

            Pronto, a partir dai consegui gerar os mapas com as escalas e setas de orientação! 😀

            Muito obrigado! Um abraço

            1. Oi Pedro, que bom que deu certo desse jeito! Vou adicionar uma observação no post para que as pessoas que usam Linux leiam os comentários caso tenham problemas!

              abraços e sucesso com seus mapas!

  8. Oi, que legal compartilhar isso. Realmente pode ajudar muito!
    O meu não colocou a barra de escala e nem a seta Norte. Este foi o erro:

    > #Exporte o mapa como uma figura PNG, incluindo agora um norte e uma escala
    > png(filename= “mapa_simples.png”, #Defina o nome do arquivo
    + res= 300, height= 20, width=16, unit=”cm”) #Aqui voce define a resolucao e tamanho da imagem
    > g +
    + ggsn::scalebar(area, dist = 100,location = “bottomright”, transform = TRUE, #Adicione uma barra de escala
    + dist_unit = “km”, st.dist = 0.03, st.size = 2, model = ‘WGS84’) +
    + ggsn::north(area, scale = .1) #Adicione uma seta com o norte
    Error: .onLoad falhou em loadNamespace() para ‘sf’, detalhes:
    chamada: get(genname, envir = envir)
    erro: object ‘group_map’ not found

    1. Oi Eliezer, esse erro também já apareceu para mim. Parecer ser um problema de compatibilidade entre a versão do R e a versão do ggsn. Atualize tanto o R quanto o pacote para as versões mais recentes, e provavelmente dará tudo certo.

Deixe uma resposta para Pedro Junger Cancelar resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.