En este artículo comparamos tres de las mejores bibliotecas de código abierto para visualización interactiva de datos en Python. Para este experimento construimos con cada una un gráfico de dificultad media.

El gráfico elegido es un gráfico de áreas apiladas con un control deslizante de fechas, totales y una leyenda interactiva. Comencemos.

Plotly

Plotly es una potente biblioteca para crear visualizaciones interactivas para la web. Admite una gran variedad de gráficos con funciones interactivas, lo que la ha convertido en una opción popular para el análisis de datos. Funciona bien con bibliotecas de Python como Pandas y NumPy y puede usarse en cuadernos Jupyter.

Usamos Plotly Express, su interfaz de alto nivel en Python, para crear el gráfico base y luego lo ajustamos a nuestras especificaciones. El gráfico fue fácil de construir, pero de fábrica tenía algunas limitaciones:

  • El eje Y no se reescala cuando cambia el control deslizante, lo que dificulta ver patrones a lo largo de la línea de tiempo.
  • No hay una forma integrada de calcular totales ni de reaccionar a los cambios en los elementos seleccionados de la leyenda.
  • Al interactuar con la leyenda, el color de relleno desaparece (un error).

Soluciones

  • Los totales pueden añadirse con JavaScript (o con un widget en cuadernos Jupyter).
  • El autoescalado del eje Y también puede resolverse con JavaScript, pero el control deslizante sigue el diseño del gráfico principal, por lo que mantener el zoom estático hace difícil desplazarlo.
El gráfico final de Plotly: útil e interactivo

Altair (Vega-Altair)

Vega-Altair es una biblioteca de Python para visualización declarativa, construida sobre la gramática de Vega. Permite crear gráficos complejos e interactivos de forma declarativa y es especialmente adecuada para gráficos estadísticos. Se integra sin problemas con Pandas, lo que la hace popular para la exploración de datos.

Usamos Altair para construir el gráfico base. En comparación con Plotly, necesitó más código para la interacción que para la apariencia. También encontramos estas limitaciones:

  • Cuando se seleccionan varios elementos desde la leyenda, hacer clic en el gráfico o en el control deslizante borra la última selección.
  • El control deslizante no funciona correctamente en dispositivos móviles y la información emergente se queda fija en pantalla si no se toca el gráfico.
  • Vega todavía no ofrece una forma de ajustar automáticamente el tamaño de los gráficos con facetas.

Soluciones

  • Compilar el gráfico a Vega resolvió el problema de la selección múltiple.
El gráfico final de Altair: útil e interactivo

PyEcharts

ECharts es una biblioteca de JavaScript de código abierto para crear gráficos interactivos y altamente personalizables. Admite una amplia gama de tipos de gráficos y funciones avanzadas, y está diseñada tanto para el rendimiento como para la flexibilidad, por lo que maneja grandes volúmenes de datos sin perder fluidez. Se usa mucho en aplicaciones web y es extensible, de modo que los desarrolladores pueden crear visualizaciones a la medida.

PyEcharts es una biblioteca de Python que ofrece una interfaz simple para ECharts, tanto para la web como para cuadernos Jupyter.

PyEcharts nos sorprendió: fue la que necesitó menos código de las tres. La única limitación fue que no hay una forma nativa de mostrar totales que respondan a los cambios de la leyenda.

Soluciones

  • Los totales se añadieron con un poco de JavaScript y sin más problemas.
El gráfico final de PyEcharts: útil e interactivo

Conclusión

Plotly

  • Necesitó menos código de fábrica, pero no entregó un gráfico totalmente interactivo y pulido.
  • Manejar eventos requirió algunos trucos y no había una solución directa.
  • El gráfico todavía presenta los errores descritos arriba.
  • Funciona muy bien en dispositivos móviles.

Altair

  • Produjo un gráfico funcional de fábrica, con un error que corregimos parcheándolo en Vega.
  • Necesitó más código, sobre todo para definir el comportamiento del gráfico.
  • No es la mejor opción para aplicaciones móviles.

PyEcharts

  • El gráfico fue funcional e interactivo de fábrica. La única carencia fue la falta de totales nativos.
  • El manejo de eventos es directo, así que personalizarlo es intuitivo y fácil.
  • Funciona perfectamente en dispositivos móviles.

ECharts y PyEcharts nos sorprendieron. Fue la única biblioteca que produjo un gráfico totalmente funcional y sin errores, con el menor código y un manejo de eventos intuitivo. Además, ECharts ofrece una enorme cantidad de tipos de gráficos, una estructura clara y buena documentación.

Aunque no es muy conocida en el ecosistema de Python, recomendamos que quien esté interesado en la visualización de datos le eche un vistazo. Y como es una biblioteca basada en JavaScript, también recomendamos aprender los fundamentos de JavaScript: es el núcleo del desarrollo front-end y, por lo tanto, de los gráficos interactivos.

BS

Bartor S.

Fundador

Todos los artículos