Sistemas de referência e evolução da Azimlib
Referência inspecionada diretamente: Matplotlib 3.11.2 instalado em ambiente de
desenvolvimento separado. tools/inspect_reference.py registra 27 módulos e
894 símbolos públicos em matplotlib-reference.json. A inspeção não copia o
backend nem inclui Matplotlib como dependência da biblioteca.
O objetivo é manter o vocabulário e a organização familiar de Figure, Axes e artistas, acrescentando coordenadas, projeções e componentes cartográficos. Não há promessa de compatibilidade integral ou igualdade de pixels nesta versão.
| Sistema do Matplotlib | Fundação atual na Azimlib | Próxima evolução |
|---|---|---|
| pyplot e gerenciamento de figuras | seleção por número/nome/sca, subplot/mosaicos, show/close, ion/ioff e conveniências | integração ampliada de event loop |
| Figure, Axes e composição | GridSpec raiz/filhos/spans/pesos, mosaicos aninhados, compartilhamento, rótulos globais, inset, dimensões/DPI, tight/constrained, SubFigure, raízes disjuntas e compressed limitado (0.3 dev) | alinhamento global de labels e refinamentos do solver |
| Artist, Text, Line2D, Patch | Artist próprio, Layer/Text/Spine/Legend, ScatterCollection editável, ownership, stale, callbacks, setp/getp, edição de linhas e relim/autoscale_view | outras classes especializadas, propriedades completas, picking e seleção |
| Paths, patches e collections | primitivas próprias, polígonos com buracos, Paths/coleções editáveis, símbolos reutilizáveis, círculos e dez hachuras | padrões e símbolos externos com proveniência |
| Cores, Normalize e ScalarMappable | normalizadores próprios, tabelas CC0 e callbacks de norm compartilhada/mappable para colorbars | normalizadores adicionais, reclassificação discreta, RGBA e arrays mascarados |
| rcParams e style sheets | defaults validados, rc_context, arquivos locais, style.use/context empilhados/reset e ciclos próprios condicionais | discovery, rcParams/ciclos de outras classes mais amplos e novos perfis |
| Axis, ticker e scale | ticks maiores/menores, grades por grupo/eixo, locators/formatters próprios, graus/hemisférios/DMS, labels, spines, tick_params, autoescala/margens, ScalarFormatter científico/offsets editáveis e EngFormatter SI | objetos Tick completos, MathText/TeX, sticky_edges, escalas completas e unidades extensíveis |
| transforms | projeção forward/inverse, CRS, viewport e transforms composáveis próprios (0.3 dev) | invalidação/cache de grafos arbitrários; câmera 3D |
| Grid e coordenadas | graticules opcionais, controle X/Y, N/S/E/W e interseções amostradas de bordas curvas (0.3 dev) | interseção exata de graticules com bordas curvas |
| Legend e colorbar | múltiplas colunas, handles compostos, best/bbox_to_anchor, textos/frame editáveis, colorbar compartilhada, cax, tickers, norm/clim e handlers PathPatch/Symbol (0.3 dev) | handlers de famílias adicionais e regeneração de legendas temáticas |
| Text, fonts e annotations | fontes DejaVu, rotação, multiline, halo, callout, labels na direção local de linhas, colisões com annotations/insets, prioridade por atributo e filtro por extensão | texto curvo por glifo, shaping complexo, posicionamento global otimizado |
| Eventos e navegação | callbacks de mouse/teclado/desenho, pan/zoom/home/history com estados de autoescala | picking, seleção de features, atualização incremental e eventos padronizados |
| Backends e canvas | SVG próprio, Pillow próprio, Tk desktop, HTML explícito | backend Qt, PDF e cache de renderização |
| Widgets | toolbar, configuração de subplots e minimapa opcional | selectors, sliders, botões e controles de camadas |
| Animation | ainda não implementada | atualização de dados, blitting e exportação temporal |
| Image, contour, tri e raster | densidade angular, imagens/meshes/vetores editáveis, marching squares e hillshade | raster georreferenciado, RGB/máscaras, triangulação, edição de contornos, contourf e resampling |
| units, dates e escalas não lineares | graus e CRS explícitos; na 0.3.0 dev, unidades/modelos, geodesia elipsoidal e UTM regional próprios; datas/log tickers e transforms numéricos (0.3 dev) | conversores automáticos de unidades e escalas adicionais |
| mplot3d, polar, axisartist e toolkits | fora desta primeira fundação | avaliar por caso; não são pré-requisitos para cartografia 2D |
| Testes e distribuição | testes numéricos, exportação, independência e componentes | baselines visuais, benchmarks, versões de dados e CI multiplataforma |
Séries e estilos têm contratos diretamente registrados: plot com grupos/matrizes/lookup data, composição de ciclos, contexto/reset, folha local e defaults da legenda. Propriedades completas, masks/units e compatibilidade integral permanecem fora deste subconjunto.
Da decomposição visual ao mapa completo
examples/components.py reúne os equivalentes dos nove elementos da imagem de
referência: título, legenda, área do mapa, labels de longitude/latitude, ticks,
grid e três séries com cores, traçados e marcadores diferentes. Acrescenta
camadas territoriais, rios, annotation, escala e rosa dos ventos. Todos são
adicionados explicitamente. Não inclui minimapa por padrão.
import azimlib.pyplot as plt
with plt.rc_context({'axes.titlesize': 16, 'lines.linewidth': 2}):
fig, ax = plt.subplots(subplot_kw={'projection': 'mercator'})
ax.map('brazil')
line, = ax.plot([-60, -50, -40], [-20, -15, -10], 'o--', label='Rota')
title = ax.set_title('Brasil')
title.set_color('#222222')
ax.set_xticks([-70, -60, -50, -40])
ax.tick_params(direction='out', labelsize=9)
ax.spines['top'].set_linewidth(1)
ax.grid(step=10)
ax.legend([line], ['Rota demonstrativa'], loc='upper left')
ax.scale_bar()
ax.compass()
fig.savefig('brasil.svg')
plt.show()
Caminho para o mapa de hidrovias
- Acabamento: finalizar métricas/layout, offsets dinâmicos no HTML, handlers de legenda compostas e escala segmentada configurável; manter exemplos de comparação.
- Simbologia cartográfica: largura/cor/traçado por atributo, labels sobre linhas, prioridade e prevenção de colisões. As categorias devem gerar legendas com a mesma simbologia, sem exigir desenho manual dos exemplos.
- Dados e semântica: conectar cada trecho a uma fonte versionada de navegabilidade, com categoria, situação e data. Os rios Natural Earth atuais não fornecem todas essas classes. As rotas coloridas do exemplo são esquemáticas e não representam hidrovias classificadas.
- Escala e desempenho: recorte por viewport, índice espacial, simplificação por resolução e cache antes de aumentar o detalhe de rios e municípios.
- Validação: mapa completo com testes de geometria, escala, classificação, legenda, legibilidade e exportação; depois repetir o processo com outros temas.
Cada etapa deve entregar um mapa reproduzível e ampliar os mesmos componentes públicos. Evita-se uma coleção de funções especiais que só funcionam na demo.
O inventário detalhado de pendências reúne o trabalho restante.