Introdução

Este relatório apresenta a distribuição espacial das notificações de COVID-19 no estado de Minas Gerais, utilizando dados georreferenciados.

1. Carregamento de Pacotes

library(tidyverse)    # Manipulação de dados
library(sf)           # Geometria espacial
library(geobr)        # Mapas oficiais do Brasil
library(ggspatial)    # Rosa dos ventos e escalas
library(scales)       # Formatação numérica
library(RColorBrewer) # Paletas de cores

2. Obtenção e Tratamento de Dados

Mapa de Minas Gerais

Baixando a malha digital oficial do IBGE via pacote geobr.

# showProgress = FALSE deixa o relatório mais limpo
mapa_mg <- read_municipality(code_muni = "MG", year = 2020, showProgress = FALSE)

Dados da COVID

Nesta etapa, criamos a base de dados. Nota: Abaixo estou simulando os dados. Quando você tiver sua planilha pronta, substituirá esta parte.

set.seed(123) # Garante que os dados sejam sempre iguais

MG2022_join <- mapa_mg %>%
  mutate(
    # Cria frequência aleatória
    Freq = runif(n(), min = 0, max = 25000)
  ) %>%
  mutate(
    # Cria as categorias (faixas de valores)
    cat = cut(Freq, 
              breaks = c(-Inf, 0, 5, 50, 1000, 1500, 2000, Inf),
              labels = c("0,00 casos", "1,0 a 5,0", "5,0 a 50,0", 
                         "50,0 a 1.000,0", "1.000,0 a 1.500,0", 
                         "1.500,0 a 2.000,0", "> 20.000,0"))
  )

3. Visualização Espacial

Abaixo, o mapa coroplético gerado a partir dos dados processados.

ggplot(MG2022_join) +
  # 1. Desenha o mapa e pinta conforme a categoria 'cat'
  geom_sf(aes(fill = cat), colour = "black", size = 0.1) +
  
  # 2. Define as cores (Paleta Dark2)
  scale_fill_brewer(palette = "Dark2") + 
  
  # 3. Adiciona escala e norte
  annotation_scale(location = "bl", width_hint = 0.3) +
  annotation_north_arrow(
    location = "tl", 
    style = north_arrow_fancy_orienteering()
  ) +
  
  # 4. Formata os eixos de latitude/longitude
  scale_x_continuous(labels = comma) +
  scale_y_continuous(labels = comma) +
  
  # 5. Títulos e Legendas
  labs(
    title = "Mapa de Calor COVID-19",
    subtitle = "Minas Gerais - 2022",
    fill = "Notificação\nde COVID",
    x = NULL, y = NULL
  ) +
  
  # 6. Tema visual limpo
  theme_void() +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    plot.subtitle = element_text(hjust = 0.5, color = "gray50")
  )

4. Visualização Interativa

Abaixo, o mapa interativo. Passe o mouse sobre as regiões para ver os detalhes ou use a barra superior para dar zoom.

library(plotly) # Carregar a biblioteca de interatividade

# 1. Criamos o objeto do mapa (chamaremos de 'p')
p <- ggplot(MG2022_join) +
  geom_sf(aes(fill = cat, 
              # AQUI ESTÁ O TRUQUE: Criamos o texto que aparece ao passar o mouse
              text = paste("Município:", name_muni, "<br>",
                           "Situação:", cat)), 
          colour = "black", size = 0.05) +
  
  scale_fill_brewer(palette = "Dark2") + 
  
  labs(fill = "Notificação", x = NULL, y = NULL) +
  
  theme_void() +
  theme(legend.position = "right")

# 2. A mágica acontece aqui: convertemos 'p' para interativo
# tooltip = "text" diz para mostrar apenas o que escrevemos na linha 'text' acima
ggplotly(p, tooltip = "text") %>%
  layout(height = 600) # Ajusta a altura na tela

5. Monitoramento Interativo (Leaflet)

Abaixo, o mapa de alta precisão. Utilize os botões de zoom ou o scroll do mouse. Você pode clicar nas regiões para ver os detalhes.

library(leaflet) # A biblioteca especialista em mapas

# 1. Preparação: O Leaflet exige projeção WGS84 (GPS mundial)
# Convertemos o mapa de MG para esse formato para alinhar com o satélite
MG_leaflet <- st_transform(MG2022_join, crs = 4326)

# 2. Criar uma paleta de cores compatível com o Leaflet
# Usamos a mesma lógica do "Dark2" que você gostou
paleta <- colorFactor(
  palette = "Dark2", 
  domain = MG_leaflet$cat
)

# 3. Construção do Mapa
leaflet(data = MG_leaflet) %>%
  
  # --- ESCOLHA O TIPO DE MAPA AQUI ---
  # Opção A: Mapa Clean (Cinza profissional - Bom para dados)
  addProviderTiles(providers$CartoDB.Positron) %>%
  
  # Opção B: Se quiser Satélite, troque a linha de cima por:
  # addProviderTiles(providers$Esri.WorldImagery) %>%
  
  # Opção C: Se quiser estilo "Google Maps" (Ruas):
  # addTiles() %>%
  # -----------------------------------

  # Adiciona os polígonos (Municípios)
  addPolygons(
    fillColor = ~paleta(cat),      # Cor baseada na categoria
    weight = 1,                    # Espessura da borda branca
    opacity = 1,
    color = "white",               # Cor da borda
    dashArray = "3",
    fillOpacity = 0.7,             # Transparência
    
    # O que acontece quando passa o mouse (Realce)
    highlightOptions = highlightOptions(
      weight = 3,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.9,
      bringToFront = TRUE),
    
    # O que aparece quando CLICA (Popup)
    popup = ~paste0(
      "<strong>Município: </strong>", name_muni, "<br>",
      "<strong>Situação: </strong>", cat, "<br>",
      "<strong>Índice (Simulado): </strong>", round(Freq, 2)
    ),
    
    # O que aparece quando PASSA O MOUSE (Label simples)
    label = ~name_muni
  ) %>%
  
  # Adiciona a Legenda no canto inferior direito
  addLegend(
    "bottomright", 
    pal = paleta, 
    values = ~cat,
    title = "Classificação COVID",
    opacity = 1
  )