Azimlib0.3.0 · documentation

Edição dos campos 2D

MeshCollection, ScalarImage e VectorCollection são handles próprios derivados de Layer/Artist. O renderer continua recebendo somente primitivas de cena; Matplotlib não participa da leitura, projeção, composição ou desenho.

import azimlib as azl
from azimlib.colors import Normalize

fig, ax = azl.subplots()
image = ax.imshow([[0, 1], [2, 3]], extent=(-50, -40, -20, -10),
                  origin='lower', norm=Normalize(0, 10))
bar = fig.colorbar(image)
image.set_data([[2, 4, 6]])
image.set_extent((-55, -40, -25, -15))
image.autoscale()  # Atualiza explicitamente o intervalo de cores.
fig.savefig('campo.svg')

Imagens escalares

ScalarImage.set_data(Z) aceita matriz retangular escalar não vazia; a forma pode mudar. As bordas das células são recalculadas no mesmo extent geográfico. get_data() devolve cópia na ordem original da matriz. origin='upper' mantém a primeira linha ao norte; lower a mantém ao sul. No desenvolvimento 0.3, RGB/RGBA e arrays mascarados possuem contratos próprios. Arrays curvilíneos de NumPy ainda não têm contrato próprio.

get_extent() e set_extent((west,east,south,north)) controlam a geografia da imagem. São exigidos limites finitos, crescentes e dentro de ±180°/±90°. image.set(data=Z, extent=..., alpha=.5) e setp editam esses campos num lote. Dados/extent inválidos e estilos rejeitados são verificados antes da alteração.

Para preservar a API inicial da Azimlib, get_array() continua retornando um vetor plano em ordem geográfica sul→norte. set_array(flat) mantém a forma existente e usa essa ordem; set_array(matrix) equivale a set_data. Isto difere do get_array de AxesImage, que retorna uma matriz. Use get_data/set_data no código novo para evitar ambiguidade de origin. Uma imagem não aceita array=None.

Malhas de células

pcolormesh retorna MeshCollection. set_array(Z) aceita matriz com forma (len(lat)-1,len(lon)-1) ou vetor plano de mesmo total. As bordas permanecem fixas. get_array() é plano; get_coordinates() retorna cópia da grade de pares longitude/latitude das bordas. Sem NumPy, essas consultas usam listas. mesh.set(array=Z, visible=True) também funciona.

mesh.set_array(None) suspende o desenho das células, preservando sua geometria; não é um preenchimento automático com facecolors previamente calculados. None/NaN/infinito em células são lacunas. O desenvolvimento 0.3 oferece resampling explícito de GeoRaster; não há rasterização georreferenciada implícita: cada célula continua um quadrilátero projetado.

Vetores

vectors = ax.quiver([-52, -48], [-25, -21], [1, 0], [0, 1], C=[20, 80])
vectors.set_UVC([0, 2], [2, 0], [30, 90])
vectors.set_offsets([[-54, -28], [-43, -18]])
vectors.set_scale(20)

VectorCollection.set_UVC(U,V,C=None) atualiza as componentes leste/norte e, se fornecidas, as cores numéricas. C omitido/None mantém as cores existentes, como Quiver; set_array(None) retira o mapeamento de cores. Componentes e C escalares ou sequências de um elemento expandem para todas as origens. Na Azimlib são armazenadas as componentes efetivas por origem; os caches internos de Quiver podem conservar arrays de um elemento.

get_UVC() é uma conveniência própria que retorna cópias de U, V e C. Offsets são longitude/latitude; a quantidade de vetores é fixa. set_offsets() move as origens; set_scale(None) retorna ao cálculo automático de escala. scale é positivo e representa unidades dos dados por largura do Axes. U/V devem ser finitos; máscaras de vetores ainda não são suportadas.

vectors.set(UVC=(U,V,C), offsets=..., scale=...)/setp agrupa a edição. Um array explícito separado precisa de um valor por origem; combinar esse array com C dentro de UVC é rejeitado. Formas/valores inválidos não deixam alterações parciais nos dados, estilos ou visibilidade.

Vista, callbacks e limites

Os mesmos handles preservam norm, paleta, colorbar e callbacks. Atualizar valores não redefine limites de cores já fixados: use autoscale ou set_clim. Norm compartilhada continua atualizando todos os campos associados. Validação de intervalos prospectivos evita alterar dados antes de descobrir limites invertidos.

Edição de dados/origens/extent não muda a vista automaticamente. Depois de alterar a geografia, ax.relim(); ax.autoscale_view() ajusta somente eixos automáticos. Esta é uma política explícita da Azimlib; imshow inicial respeita limites manuais de cada eixo e fixa por extent os eixos ainda automáticos. Edições de extent não copiam todas as regras de sticky_edges de Matplotlib. Valores de imagem e direção de vetor não alteram a geografia dos limites. Veja normalização e limites. Os casos de limites manuais foram comparados diretamente à referência no aceite de integração.

set/setp aceita norm/cmap/clim junto dos dados/estilos e agrupa notificações do mesmo handle. Veja lotes de cores. Não há transação geral entre diferentes Artists, callbacks ou normalizadores externos. Setters dedicados continuam disponíveis. remove/clear desligam os handles da figura. O HTML continua uma exportação; alterações posteriores em Python exigem nova exportação.

O exemplo antes/depois usa dados sintéticos. field-edits-reference.json compara oito estados de imagem, dois de mesh e quatro de vetores efetivos com Matplotlib 3.11.2/Agg. Contornos e clabel têm handles de estilo/texto editáveis, mas sua geometria não é recalculada implicitamente ao editar outro campo; animação, blitting e novas coordenadas de mesh continuam pendentes. RGB/máscaras e resampling explícito foram adicionados no lote científico 2D.