Criando mapas vetoriais da África com Python e dados abertos
A maioria das pessoas que precisa de um mapa da África para um projeto de visualização de dados acaba caçando PNGs em sites genéricos. O problema é que essas imagens têm resolução limitada, não exibem fronteiras com precisão e geralmente distorcem o tamanho relativo dos países africanos por causa da projeção Meridiano Transverso de Mercator mal configurada. Eu segui esse caminho por um tempo até decidir construir meu próprio fluxo com geopandas e os dados abertos do Natural Earth. O Natural Earth oferece camadas vetoriais em 10m, 50m e 110m de resolução. Para a África, a camada 50m é o ponto ideal entre peso do arquivo e detalhe das fronteiras. O arquivo se chama admin_0_countries e está disponível gratuitamente em naturalearthdata.com/downloads/. Você baixa o shapefile, extrai, e filtra apenas os países que ficam dentro dos limites continentais africanos. Simples, mas exige atenção aos detalhes.
Mapa da áfrica com projeção conforme e ajuste manual
Aqui está o código que eu uso no dia a dia. Ele lê o shapefile, corta para a região africana, aplica a projeção Albers Equal Area e gera um mapa prático com cores distintas por país. Código básico:
import geopandas as gpd
from shapely.geometry import box
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors Carrega os dados do Natural Earth
world = gpd.read_file('ne_110m_admin_0_countries.shp')
Filtra países africanos por código ISO ou região
africa_countries = ['DZA', 'AGO', 'BEN', 'BWA', 'BFA', 'BIJ', 'CAF', 'TCD', 'CPV', 'CMR',
'COD', 'COG', 'COM', 'CIV', 'GNQ', 'ERI', 'SWZ', 'ETH', 'GAB', 'GHA',
'GIN', 'GMB', 'GNB', 'KEN', 'LBR', 'LBY', 'MAR', 'MUS', 'MDG', 'MLI',
'MRT', 'MUS', 'MOZ', 'NAM', 'NER', 'NGA', 'CGO', 'RWA', 'SEN', 'SYC',
'SL', 'SOM', 'ZAF', 'SSD', 'SDN', 'TGO', 'TZA', 'TUN', 'UGA', 'ZMB', 'ZWE']
africa = world[world.iso_a3.isin(africa_countries)]
Aplica projeção Equal Area Albers ajustada para África
africa = africa.to_crs('+proj=aea +lat_1=8 +lat_2=36 +lat_0=22 +lon_0=25')
fig, ax = plt.subplots(1, 1, figsize=(12, 14))
africa.plot(ax=ax, column='iso_a3', cmap='tab20', legend=True, edgecolor='white')
ax.set_title('Mapa Político da África', fontsize=14, fontweight='bold')
ax.axis('off')
plt.tight_layout()
plt.savefig('africa_map.png', dpi=300, bbox_inches='tight') Um detalhe que quase ninguém menciona: a projeção Albers precisa de paralelos padrão ajustados especificamente para a latitude da África. Se você usar os valores padrão, o mapa vai distorcer severamente os países do norte e do sul do continente. Os valores 8 e 36 graus funcionam bem porque abrangem a maior parte da massa continental africana.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Outro problema que eu enfrentei recentemente: Madagascar aparece deslocado quando você usa a projeção padrão. A solução foi adicionar Madagascar manualmente usando suas coordenadas reais e ajustar a escala para manter a proporção visual correta. O país fica a cerca de 400 quilômetros da costa leste africana, então ele não deve ser representado como parte do continente principal no mapa.
Alternativas quando o geopandas não resolve
Se você precisa de algo mais rápido e não quer lidar com projeções, existe a biblioteca cartopy com dados predefinidos. Ela já traz a África com boa aparência, mas a personalização é limitada. Para uso acadêmico ou relatórios formais, recomendo ficar com o fluxo geopandas + Natural Earth. O arquivo shapefile do Natural Earth ocupa cerca de 15 megabytes extraídos. Em máquinas com menos de 8GB de RAM, carregar todos os países do mundo pode travar o processo. Uma otimização útil é filtrar antes de aplicar a projeção, não depois. Isso reduz o tempo de processamento de cerca de 4 minutos para menos de 30 segundos no meu caso.
Para mapas temáticos com dados demográficos, você pode fundir tabelas CSV com o GeoDataFrame usando o campo iso_a3 como chave. O geopandas faz isso automaticamente com merge. Só cuidado com países que têm nomes diferentes nas fontes de dados — alguns usam siglas de três letras, outros o nome completo. Um dicionário de normalização evita horas de depuração. O mapa resultante em PNG com 300 DPI fica bom para apresentação em projeções de tela e impressão em A3. Para materiais em alta resolução, exporte em SVG antes de converter, assim você mantém a qualidade vetorial original até a etapa final.
Dicas práticas para refinar o visual do mapa
Adicione uma caixa de grade simples com linhas de latitude e longitude. Use plt.grid com alpha baixo para não competir com os polígonos dos países. Uma legenda automática do geopandas já funciona, mas você pode personalizar os rótulos para mostrar nomes em português em vez dos códigos ISO se o público não for técnico. O fluxo completo leva cerca de 15 minutos para configurar na primeira vez. Depois disso, um script automatizado gera o mapa em dois minutos. Se você precisar atualizar com frequência, considere usar qgis para exportar camadas pré-filtradas e só rodar o script de visualização.
Acesse naturalearthdata.com/downloads/vector-maps/ para baixar os dados. O link direto para a versão 50m é mais leve e recomendável para a maioria dos casos de uso relacionados a mapa da áfrica em projetos de análise espacial e visualização de dados continentais.