Entendendo mapa de pelotas na prática
O mapa de pelotas é basicamente uma visualização onde bolhas sobrepostas a um mapa representam dados quantitativos. O tamanho de cada círculo corresponde a um valor numérico, geralmente população, número de eventos ou qualquer métrica agregada por região. Parece simples, mas existem armadilhas que todo mundo encontra pela primeira vez quando tenta fazer isso funcionar direito.
O que é realmente um mapa de pelotas
Em termos técnicos, você está mapeando dados geoespaciais com variáveis proporcionais. Cada ponto no mapa tem coordenadas X e Y e um raio calculado com base no valor da sua variável. Diferente de mapas coropléticos, que pintam áreas inteiras com cores, o mapa de pelotas usa círculos posicionados em coordenadas específicas. Isso é importante porque permite mostrar dados em pontos específicos sem depender de divisões administrativas. A lógica básica envolve três componentes: as coordenadas geográficas dos seus pontos, os valores que cada ponto representa, e o algoritmo de escala que converte esses valores em raios visíveis no mapa. A maioria das ferramentas modernas faz essa conversão automaticamente, mas entender o processo por trás ajuda quando algo dá errado.
O problema mais comum é a sobreposição excessiva de bolhas. Quando você tem muitos pontos em uma área densa, os círculos se sobrepõem e o mapa fica ilegível. Eu passei semanas lidando com isso usando dados de ocorrência de espécies em São Paulo e Rio de Janeiro juntos. As bolhas ficavam todas em cima umas das outras e não dava para diferenciar nada. A solução que funcionou foi aplicar transparência com opacidade de cerca de 40 por cento, mais um limite máximo de raio para evitar bolhas que cobrissem o mapa inteiro.
Como construir um mapa de pelotas do zero
Você vai precisar de três coisas: dados com coordenadas geográficas, os valores numéricos para escalar, e uma ferramenta capaz de renderizar camadas vetoriais. O fluxo básico é carregar as coordenadas, calcular os raios proporcionais, definir a paleta de cores e aplicar o renderizador. Para o cálculo dos raios, a abordagem mais segura é usar escala logarítmica em vez de linear. Dados reais nunca são uniformes, e uma escala linear vai fazer com que os valores maiores dominem completamente o mapa enquanto os menores viram pontos invisíveis. Um logaritmo natural comprimido funciona bem na maioria dos casos práticos.
No R, o pacote tmap ou leaflet com a função addCircles resolve rapidamente. No Python, o geopandas combinado com contextily para basemaps e matplotlib para renderização Circular funciona decentemente. Para projetos que precisam de interatividade, o kepler.gl permite importar dados CSV com coordenadas e gera o mapa de pelotas automaticamente em questão de minutos. Um detalhe que as pessoas esquecem é o tratamento de valores zero ou ausentes. Bolhas com raio zero simplesmente não aparecem, mas isso pode distorcer a percepção do mapa. Minha recomendação é manter todos os pontos visíveis com um raio mínimo, mesmo que tiny, e sinalizar visualmente quando o valor for zero ou missing. Isso evita que o mapa pareça vazio em regiões que na verdade têm dados.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Pegadinhas que ninguém conta
O primeiro erro clássico é usar distância visual como métrica para comparar valores. O olho humano julga áreas, não raios. Se você dobrar o raio de uma bolha, a área quadruplica, mas a maioria das pessoas percebe apenas um aumento linear. A solução é usar escalas que considerem a área proporcional, não o raio diretamente. Ferramentas como o Leaflet não fazem essa correção automaticamente, então você precisa ajustar manualmente aplicando a raiz quadrada na conversão de valor para raio. O segundo erro grave é ignorar a projeção cartográfica. Dados em WGS84 (lat/lon) têm distorções progressivas à medida que você se afasta do equador. Se seus pontos estiverem espalhados por diferentes latitudes, os tamanhos relativos podem ficar enganosos. Sempre reprojete para uma projeção equivalente em área antes de calcular os raios. No GeoPandas isso é uma linha: .to_crs(epsg=6933) para uma projeção equal-area global.
A performance também é um fator subestimado. Mapas com mais de mil bolhas começam a ficar lentos em browsers comuns, especialmente se você estiver usando interatividade. Eu tive um caso com cerca de doze mil pontos de monitoramento ambiental e o mapa simplesmente travava. O workaround foi aplicar densificação com clustering em tempo de renderização, agrupando pontos próximos em uma única bolha maior com o valor somado. O resultado ficou legível e carregou em menos de três segundos. Outro problema real é a seleção de paletas de cores. Cores saturadas demais combinadas com transparência criam manchas escuras onde as bolhas se sobrepõem, gerando ruído visual. Paletas viridis ou plasma funcionam bem porque mantêm contraste perceptual consistente mesmo com sobreposição. Evite cores quentes como vermelho e laranja para valores altos em sobreposição, pois o efeito visual é confuso e cansativo.
Downloads e ferramentas úteis
Para começar rápido, o QuickMapServices oferece basemaps gratuitos que você pode usar junto com plugins QGIS para gerar mapa de pelotas sem precisar escrever código. No QGIS, o plugin Semi-Automatic Classification Plugin permite ajustar raios e transparências visualmente. Se quiser algo mais programático, o repositório kepler.gl no GitHub é gratuito e permite importar dados diretamente do navegador sem instalação. Para quem prefere R, o tidymaps e tmap estão no CRAN. No Python, geopandas e folium são as opções mais estáveis no PyPI atualmente.
Um dataset de teste que recomendo para praticar é o conjunto de dados de estações pluviométricas do INPE, disponível gratuitamente no site do Instituto Nacional de Pesquisas Espaciais. Você tem coordenadas reais, valores numéricos consistentes e cobertura nacional, o que cobre todos os cenários que você vai encontrar no mundo real.
Quando não usar mapa de pelotas
Nem todo dado geoespacial se beneficia dessa representação. Se seus dados são contínuos e não pontuais, como temperatura ou precipitação média regional, um mapa coroplético ou de isolinhas é mais adequado. O mapa de pelotas funciona bem quando você tem eventos discretos localizados, pontos de interesse com métricas associadas, ou dados amostrais coletados em estações específicas. Também não funciona bem quando a variação entre os menores e maiores valores é extrema. Se o maior valor é cem vezes o menor, nenhuma escala razoável vai conseguir mostrar ambos simultaneamente sem perder informação. Nesse caso, considerar uma transformação logarithmic prévia dos dados ou separar a visualização em dois mapas com ranges diferentes é mais honesto do que tentar forçar tudo numa única composição.