- A visualização de dados científicos passou a enfrentar gargalos maiores devido a dados volumosos e de alta dimensionalidade, além da demanda por análise em tempo real; o fastplotlib é uma biblioteca Python que busca reduzir isso com plotagem acelerada por GPU
- Com renderização baseada em WGPU, ele oferece suporte a exploração de dados em grande escala, prototipagem rápida, design de algoritmos e construção de sistemas de aquisição em tempo real para instrumentação
- Adota uma API centrada em arrays, permitindo alterar dinamicamente propriedades gráficas como cor, colormap e dados com indexação no estilo NumPy mesmo após o plot inicial
- Com um sistema de eventos baseado em callbacks, define interações do usuário como cliques; no exemplo, o fluxo encontra o círculo mais próximo da posição clicada e muda sua cor
- A renderização é abstraída sobre o pygfx e, via WGPU, tem como alvo Vulkan, Metal e DX12, focando no uso de GPUs modernas mais do que ferramentas centradas em OpenGL
Os gargalos de visualização científica que o fastplotlib quer resolver
- fastplotlib é uma biblioteca de plotagem científica acelerada por GPU com WGPU, voltada para visualizações rápidas e interativas
- Em geral, a visualização científica se torna difícil pelos seguintes motivos
- os dados podem chegar à escala de terabytes e muitas vezes são de alta dimensionalidade
- é difícil usar os recursos computacionais com eficiência
- muitas ferramentas são focadas em plots estáticos ou não escalam bem para grandes volumes de dados
- a visualização fica mais lenta que a geração dos dados, atrasando análises em tempo real
- Para visualização interativa e de alto desempenho, o fastplotlib destaca os seguintes usos
- visualização acelerada por GPU
- prototipagem rápida e design de algoritmos
- exploração de grandes volumes de dados e renderização rápida
- criação de sistemas de aquisição em tempo real para instrumentação
- Para a maioria dos casos de uso, uma GPU integrada moderna já é suficiente
Exploração interativa além dos plots estáticos
- A visualização científica tradicional dependeu por muito tempo de plots estáticos, mas visualizações dinâmicas e interativas tornam a exploração e a análise de dados mais diretas
- Como exemplo, a matriz de covariância do Olivetti faces dataset é visualizada de forma interativa com fastplotlib
- o subplot da esquerda mostra a matriz de covariância do Olivetti faces dataset
- cada item da matriz de covariância representa como a intensidade de dois pixels varia em conjunto
- o subplot da direita é uma imagem reconstruída da linha atualmente selecionada da matriz de covariância
- ao mover o seletor, é possível trocar facilmente a linha observada
- Em vez de ver apenas a matriz de covariância de forma estática, observar junto a imagem reconstruída de cada linha ajuda a entender melhor como a intensidade dos pixels varia entre os rostos do dataset
- Este exemplo mostra que, mesmo com um nível pequeno de interação, já é possível melhorar a compreensão dos dados
- O fastplotlib quer ampliar o alcance da visualização científica oferecendo mecanismos para criar plots interativos de alto nível
Uma API tratada como array
- O ecossistema Python de visualização científica tem muitas ferramentas open source, mas algumas bibliotecas elevam a barreira de entrada para cientistas e usuários por causa de APIs complexas
- O fastplotlib busca oferecer visualização interativa rápida com uma API intuitiva
- A ideia central do design é permitir que os dados na visualização não precisem ser pensados como algo além de arrays
- Quando os dados mantêm uma estrutura de array familiar, a interação com a visualização também se torna mais simples
- No exemplo, após desenhar uma onda senoidal, a cor de um ponto a cada três é alterada para vermelho com indexação no estilo NumPy
sine_wave.colors[::3] = "red"
- Dessa forma, várias propriedades do gráfico podem ser manipuladas dinamicamente mesmo após o plot inicial
- A API baseada em arrays é a base para tornar o fastplotlib flexível e intuitivo de usar
Um sistema de eventos construído com callbacks
- O fastplotlib também foi projetado para tornar o sistema de eventos simples de lidar
- Eventos entre gráficos ou plots podem ser definidos com funções de callback, permitindo criar e expandir visualizações interativas
- O exemplo de evento de clique funciona no seguinte fluxo
- gera vários dados de círculos
- adiciona os círculos ao plot com
add_line_collection
- registra um handler do evento
"click" no renderizador
- converte a posição do clique de coordenadas de tela para coordenadas de mundo
- encontra o gráfico mais próximo da posição clicada
- muda a cor do círculo mais próximo para branco
- O tratamento de eventos funciona definindo primeiro o comportamento em uma função e depois adicionando o handler ao gráfico ou plot correspondente
- Em vez de aprender uma API complexa e específica da biblioteca, o usuário pode montar a interação simplesmente definindo funções
Uso de GPUs modernas e APIs gráficas atuais
- GPUs praticamente se tornaram um pré-requisito em trabalhos científicos, e a visualização não é exceção
- Para criar visualizações em alta resolução com bom desempenho, é preciso aproveitar ao máximo os recursos computacionais da GPU
- Um exemplo do fastplotlib plota 3 milhões de pontos enquanto executa as seguintes tarefas
- plota linhas
- realiza zoom in e zoom out
- altera o colormap da linha
- muda individualmente a cor de pontos específicos
- Em outras bibliotecas Python de visualização científica, é difícil plotar tantos pontos de uma vez e controlar com esse nível de detalhe a cor de cada ponto
- O fastplotlib é abstraído sobre o motor de renderização pygfx
- O pygfx é executado com WGPU, e o WGPU usa as seguintes APIs gráficas em cada plataforma
- Linux: Vulkan
- Mac: Metal
- Windows: DX12
- Vulkan, Metal e DX12 são APIs gráficas mais novas que o OpenGL, sendo mais rápidas, mais eficientes e melhores no aproveitamento do hardware da GPU
- O fastplotlib foi construído sobre o pygfx para abstrair detalhes de baixo nível do motor de renderização e código repetitivo, como câmera, renderizador e cena, permitindo que o usuário foque nos dados
Documentação e próximos conteúdos
- O fastplotlib busca lidar com os problemas atuais da visualização científica em Python combinando uma API baseada em arrays e hardware gráfico moderno
- A documentação e os exemplos estão disponíveis na documentação do fastplotlib
- guia do usuário
- como começar
- galeria de exemplos
- Perguntas e discussões são recebidas via GitHub Issue ou Discussion
- No futuro, devem ser adicionados textos que abordem com mais profundidade exemplos de uso do fastplotlib e a tecnologia gráfica em que ele se apoia
Ainda não há comentários.