Azimlib0.3.0 · documentation

Visibilidade, substituição e ciclo de vida de componentes

Outputs under gallery/ are local generated previews, not distributed assets. For versioned current images, see the 0.3 gallery.

O protocolo próprio de Artist continua preservando handles editáveis, stale, callbacks e o caminho separado de exportação estática/viewer. Este lote corrige referências descartadas e o momento de registrar uma nova colorbar, sem usar Matplotlib no runtime.

Ocultar um componente ou seu texto

legend = ax.legend(title='Camadas')
legend.set_visible(False)                 # Oculta a legenda inteira.
legend.set_visible(True)
legend.get_title().set_visible(False)     # Oculta somente o título.
legend.get_texts()[0].set_visible(False)   # Oculta o texto, preservando o símbolo.

bar = fig.colorbar(points, ax=ax, orientation='horizontal')
bar.label_artist.set_visible(False)       # Oculta somente o rótulo da barra.

Títulos de legenda, textos de entradas, ticks e rótulos de colorbar são filhos estruturais. Seu remove() agora levanta NotImplementedError antes de alterar visibilidade/stale, em vez de falhar com IndexError ao tratar os textos da legenda como tuplas da Figure. Use set_visible(False). Textos livres da Figure, títulos/rótulos de MapAxes e camadas com remoção implementada continuam removíveis. set_visible(True) não reinsere um Artist já retirado da composição.

Substituir e limpar

Escala, norte, rosa, overview e colorbar local têm slots independentes nos Axes. Uma nova instância válida do mesmo tipo substitui a anterior e desconecta seus handles. Um argumento inválido preserva a instância atual. Norte e rosa continuam coexistindo; não substituem um ao outro.

previous = ax.scale_bar(length=200)
scale = ax.scale_bar(length=100)
assert previous.get_figure() is None

old_bar = ax.colorbar(mapping)
bar = ax.colorbar(mapping, orientation='horizontal')
assert old_bar.get_figure() is None

Colorbars locais antigas desconectam o callback do mappable na substituição ou em ax.clear(). Colorbars compartilhadas e as de cax explícito são Artists da Figure e não são removidas ao limpar apenas um mapa; podem ser retiradas por bar.remove() ou fig.clear(). Alterar um mappable que ainda seja uma camada ativa continua invalidando seus Axes, mesmo se sua barra foi removida.

A construção de uma colorbar não agenda desenho antes do registro. Em ion(), adicionar/substituir a barra local ou limpar os Axes solicita uma atualização com o estado final. Não há transação com rollback geral entre vários Artists.

Rótulos de ticks descartados

Trocar ticks/locator/formatter descarta os textos explícitos correspondentes, desconectando owner/parent antigos; eixos compartilhados seguem a mesma regra ao sincronizar ou entrar no grupo. A substituição de norm de colorbar também descarta ticks maiores/menores antigos. Alterar apenas clim ou mudar orientação preserva os handles explícitos atuais.

old = ax.set_xticks([-50], ['Antigo'])
current = ax.set_xticks([-45], ['Atual'])
assert old[0].get_figure() is None
current[0].set_color('red')

Editar os handles descartados não invalida a Figure anterior. Consulte os handles retornados pelo setter atual; a reutilização completa de objetos Tick do Matplotlib não está implementada.

Referência direta e limites

Registro local: Matplotlib 3.11.2/Agg e Azimlib, nove contratos observados. Cinco coincidem: remoção não suportada de texto de entrada, visibilidade independente de entrada/título/frame, rótulo de colorbar ocultável, locator preservado ao mudar clim e reiniciado ao trocar norm.

Quatro diferenças são explícitas: Matplotlib retém/reutiliza ticks antigos; sua barra ocupa outro Axes e sobrevive ao clear do mapa; remover uma legenda antiga limpa a referência à atual no caso registrado; editar o mappable de uma barra removida ainda marcou a Figure como stale nesse experimento. Azimlib desconecta ticks descartados, remove sua barra local com o mapa e preserva a legenda atual quando uma anterior é removida. O caso de mappable independente de barra removida permanece limpo. Esses resultados são do experimento, não uma afirmação sobre todos os backends ou versões da referência.

Doze regressões adicionais/18 subtests verificam integração da Scene/SVG, visibilidade reversível, callbacks, eixos compartilhados, validação antes de substituir e desenho observando o registro completo. O smoke Tk confere sete cenários em janelas reais ocultas com edições programáticas; não mede input físico, pintura visível ou latência. O lote seguinte corrigiu o primeiro draw: callbacks e canvas são registrados antes dele, com recuperação de erro e fechamento reentrante. Veja integração de composição.

O exemplo gera antes (gallery/component-lifecycle-before.png, generated locally) e depois (gallery/component-lifecycle-after.png, generated locally), com PNG/SVG estáticos e HTML separado. Todos os componentes são adicionados explicitamente.

python examples/component_lifecycle.py
python tools/smoke_component_lifecycle_tk.py
# Somente desenvolvimento, requer Matplotlib:
python tools/inspect_component_lifecycle.py

Ainda faltam ampliar propriedades e casos de integração dos Artists existentes, conferir composição em outros tamanhos/DPI, input/aparência nativos e resultados reais de CI. Não se declara fechado o critério de Artists da 0.2.0.

Múltiplos grupos/matrizes, ciclos e defaults de legenda em contextos foram consolidados no lote de séries e estilos.