Estilos e recortes: Azimlib × Matplotlib/Agg
Outputs under gallery/ are local generated previews, not distributed assets.
For versioned current images, see the 0.3 gallery.
Nove pares em 100/150/200 DPI comparam a mesma Scene própria, fontes e tamanhos físicos em dois rasterizadores. Matplotlib 3.11.2/Agg é usado somente na ferramenta de desenvolvimento; o pacote e seus renderizadores continuam independentes.
- Traços: 0,25/0,5/1,5 pt, cores, opacidade, padrões contínuos/tracejados/customizados, extremidades butt/round/square e junções miter/round/bevel.
- Recortes retangulares fracionários: traço fino, caps/tracejado, polígono com buraco, texto rotacionado com halo/fundo, marcadores e sobreposição com alpha.
- Hachuras: catálogo público com dez padrões básicos, repetição/composição e buracos.
Inspeção visual dos painéis traços/100 DPI (gallery/style-quality-strokes-100-comparison.png, generated locally),
recortes/100 DPI (gallery/style-quality-clipping-100-comparison.png, generated locally) e
hachuras/200 DPI (gallery/style-quality-hatches-200-comparison.png, generated locally) não identificou
defeito material adicional nestes exemplos. Persistem diferenças pequenas de
suavização, hinting de fonte e cobertura dos traços; os pixels não são idênticos.
Cada par também tem PNG separado, SVG próprio e imagem de diferença na galeria.
Medições descritivas
MAE é a diferença RGB absoluta média em escala 0–255. A média ocupada exclui somente o fundo branco comum; o percentual conta pixels cuja maior diferença de canal excede 16. Não são notas de qualidade nem limiares de aprovação. Os exemplos têm áreas e quantidades de tinta diferentes, portanto as linhas da tabela não devem ser usadas para classificar estilos ou escolher DPI.
| Caso | DPI | MAE RGB | MAE ocupada | Pixels com diferença >16 |
|---|---|---|---|---|
| Traços | 100 | 3.587 | 4.902 | 3.33% |
| Traços | 150 | 3.774 | 5.206 | 3.21% |
| Traços | 200 | 1.843 | 2.561 | 1.96% |
| Recortes | 100 | 1.736 | 3.377 | 2.11% |
| Recortes | 150 | 2.201 | 4.294 | 2.08% |
| Recortes | 200 | 2.117 | 4.140 | 1.79% |
| Hachuras | 100 | 1.356 | 11.128 | 1.31% |
| Hachuras | 150 | 1.076 | 9.802 | 0.89% |
| Hachuras | 200 | 0.759 | 7.989 | 0.58% |
Dados completos incluem versões, dimensões, itens, hashes dos PNGs e dos renderizadores usados.
Alcance e reprodução
Esta comparação isola rasterização. Não compara a composição de Axes/ticks/layout independente do Matplotlib, sua cartografia ou seu viewer. Os paths de hachura foram gerados pela Azimlib e enviados aos dois renderizadores: não demonstra igualdade com o gerador nativo de hachuras do Matplotlib. O adaptador de referência desenha halo como contorno vetorial sob texto com hinting; caminhos complexos autointersectantes com even-odd ficam fora de seu contrato.
Os SVGs foram conferidos como XML válido, com dimensões correspondentes aos PNGs. Não se fez nesta bateria uma segunda rasterização independente dos SVGs. A igualdade byte a byte antes/depois da otimização é uma regressão entre versões do renderer próprio, separada da comparação diagnóstica com Agg.
Em ambiente de desenvolvimento com Pillow, NumPy e Matplotlib instalados:
python tools/compare_style_quality.py --cases strokes clipping hatches --dpi 100 150 200
O comando gera imagens e relatório, sem medir performance. Veja também mapas completos e tempo do rasterizador.