Neste artigo comparamos três das melhores bibliotecas de código aberto para visualização interativa de dados em Python. Neste experimento, construímos com cada uma delas um gráfico de dificuldade média.
O gráfico escolhido é um gráfico de áreas empilhadas com um controle deslizante de datas, totais e uma legenda interativa. Vamos começar.
Plotly
O Plotly é uma biblioteca poderosa para criar visualizações interativas para a web. Ele oferece uma grande variedade de gráficos com recursos interativos, o que o tornou uma escolha popular para análise de dados. Funciona bem com bibliotecas Python como Pandas e NumPy e pode ser usado em notebooks Jupyter.
Usamos o Plotly Express, sua interface de alto nível em Python, para criar o gráfico base e depois o ajustamos às nossas especificações. O gráfico foi fácil de construir, mas, de fábrica, tinha algumas limitações:
- O eixo Y não se reescala quando o controle deslizante muda, o que dificulta ver padrões ao longo da linha do tempo.
- Não há uma forma integrada de calcular totais nem de reagir às mudanças nos itens selecionados da legenda.
- Ao interagir com a legenda, a cor de preenchimento desaparece (um bug).
Soluções
- Os totais podem ser adicionados com JavaScript (ou com um widget em notebooks Jupyter).
- O autoescalonamento do eixo Y também pode ser resolvido com JavaScript, mas o controle deslizante segue o layout do gráfico principal, então manter o zoom estático dificulta rolá-lo.
Altair (Vega-Altair)
O Vega-Altair é uma biblioteca Python para visualização declarativa, construída sobre a gramática do Vega. Permite criar gráficos complexos e interativos de forma declarativa e é especialmente adequada para gráficos estatísticos. Integra-se perfeitamente com o Pandas, o que a torna popular para exploração de dados.
Usamos o Altair para construir o gráfico base. Em comparação com o Plotly, ele precisou de mais código para a interação do que para a aparência. Também encontramos estas limitações:
- Quando vários itens são selecionados pela legenda, clicar no gráfico ou no controle deslizante apaga a última seleção.
- O controle deslizante não funciona corretamente em dispositivos móveis e a dica de ferramenta fica presa na tela se o gráfico não for tocado.
- O Vega ainda não oferece uma forma de dimensionar automaticamente gráficos com facetas.
Soluções
- Compilar o gráfico para Vega resolveu o problema da seleção múltipla.
PyEcharts
O ECharts é uma biblioteca JavaScript de código aberto para criar gráficos interativos e altamente personalizáveis. Oferece uma ampla gama de tipos de gráficos e recursos avançados e foi projetada tanto para desempenho quanto para flexibilidade, lidando com grandes volumes de dados sem perder a fluidez. É muito usada em aplicações web e é extensível, de modo que os desenvolvedores podem criar visualizações sob medida.
O PyEcharts é uma biblioteca Python que oferece uma interface simples para o ECharts, tanto para a web quanto para notebooks Jupyter.
O PyEcharts nos surpreendeu: foi a que precisou de menos código entre as três. A única limitação foi que não há uma forma nativa de mostrar totais que respondam às mudanças da legenda.
Soluções
- Os totais foram adicionados com um pouco de JavaScript e sem outros problemas.
Conclusão
Plotly
- Precisou de menos código de fábrica, mas não entregou um gráfico totalmente interativo e polido.
- Lidar com eventos exigiu alguns truques e não havia uma solução direta.
- O gráfico ainda apresenta os bugs descritos acima.
- Funciona muito bem em dispositivos móveis.
Altair
- Produziu um gráfico funcional de fábrica, com um bug que corrigimos aplicando um patch no Vega.
- Precisou de mais código, principalmente para definir o comportamento do gráfico.
- Não é a melhor opção para aplicativos móveis.
PyEcharts
- O gráfico foi funcional e interativo de fábrica. A única lacuna foi a falta de totais nativos.
- O tratamento de eventos é direto, então personalizá-lo é intuitivo e fácil.
- Funciona perfeitamente em dispositivos móveis.
O ECharts e o PyEcharts nos surpreenderam. Foi a única biblioteca que produziu um gráfico totalmente funcional e sem bugs, com o menor código e um tratamento de eventos intuitivo. O ECharts também oferece uma enorme quantidade de tipos de gráficos, uma estrutura clara e boa documentação.
Embora não seja muito conhecida no ecossistema Python, recomendamos que quem se interessa por visualização de dados dê uma olhada nela. E, como é uma biblioteca baseada em JavaScript, também recomendamos aprender o básico de JavaScript: ele é o núcleo do desenvolvimento front-end e, portanto, dos gráficos interativos.



