Estudio de Visualización de Datos con JavaScript

Documentación del artículo de Monterail: las 15 librerías JS de visualización de datos comparadas por renderizado (SVG / Canvas / WebGL), encaje con framework y licencia. La idea central: el modelo de renderizado pone el techo — SVG cómodo hasta ~10 000 elementos, Canvas maneja más, WebGL para datasets gigantes y tiempo real. Elegir mal = reescribir el dashboard.

Resumen con para qué y cómo, listo para tu OKF/Obsidian.

1 · Comparativa de las 15 a un vistazo

LibreríaRenderingLicenciaMejor ajuste
D3.jsSVG (+Canvas)ISC (open)El gráfico es el producto
RechartsSVGMITDashboards en React
VictorySVGMITWeb + React Native
ChartkickDelegadoMITUna línea, stacks mixtos
FlexmonsterPivot + chartsComercialPivotes enterprise
WebDataRocksPivot + chartsFreePivotes pequeños
ApexChartsSVGMITDashboards pulidos rápido
Chart.jsCanvasMITEl default estándar
Apache EChartsCanvas/SVG/WebGLApache 2.0Datasets gigantes, enterprise
NivoCanvas/SVG/HTMLMITReact + SSR
amChartsCanvas (v5)Free+backlink / $90–180Pulido + soporte
CanvasJSCanvasComercialRendimiento bruto
HighchartsSVG + boostComercial (free edu)Enterprise/reguladas
ZoomChartsCanvasComercialTouch-first
Vega / Vega-LiteCanvas o SVGBSD-3Declarativa por spec
🧠 Rendering = techo: SVG crea un nodo DOM por punto (flexible, accesible, pero lento pasados ~10k). Canvas dibuja píxeles (rápido a escala, pero hay que reimplementar la interacción). WebGL usa la GPU (scatter 3D, streams real-time).

2 · Las 15 librerías

🛠️ D3.js — el estándar para visualizaciones custom

Stars 112k · SVG · Open source (ISC) · Mantenido por Observable. "The JavaScript library for bespoke data visualization". Curva alta, máxima flexibilidad. En React: módulos no-DOM (d3-scale, d3-array) en JSX; módulos DOM (d3-selection) con ref + useEffect.

// script minimalista (d3-scale — seleccionar escala)
import { scaleLinear } from 'd3-scale';
const x = scaleLinear().domain([0, 100]).range([0, 500]);
console.log(x(50)); // 250

⚛️ Recharts — gráficos React declarativos

Stars 26k · SVG · MIT · Encima de D3 con componentes nativos de React. Leyendas, tooltips y labels integrados. TypeScript sólido. >470 issues abiertos.

// npm i recharts
import { BarChart, Bar } from 'recharts';
<BarChart width={400} height={200} data={data}>
  <Bar dataKey="ventas" fill="#5ad1e6" />
</BarChart>

📱 Victory — React Native cross-platform

Stars 11.2k · SVG · MIT · Componentes modulares para React y React Native (Nearform). ARIA fuerte out-of-the-box. API consistente web/móvil.

// npm i victory
import { VictoryBar } from 'victory';
<VictoryBar data={[{x:1,y:2},{x:2,y:4}]} />

📈 Chart.js — el default (Canvas)

Stars 66.6k · Canvas · MIT · La más descargada (millones/semana). 8 tipos core (~16 con extensiones). v4+: tree-shaking, mejor TypeScript. Friendly para principiantes.

// npm i chart.js
import Chart from 'chart.js/auto';
new Chart(document.getElementById('g'), {
  type: 'bar',
  data: { labels: ['A','B'], datasets: [{ data: [10, 20] }] },
});

🚀 Apache ECharts — enterprise a escala

Stars 64.7k · Canvas/SVG/WebGL (GL) · Apache 2.0 · Antes Baidu, ahora Apache. >20 tipos, progressive rendering, TypedArray; documenta 10M puntos en real-time. v6 actual.

// npm i echarts
import * as echarts from 'echarts';
const chart = echarts.init(document.getElementById('g'));
chart.setOption({ xAxis: {}, yAxis: {}, series: [{ type: 'bar', data: [5,20] }] });

🧩 ApexCharts · Nivo · Chartkick

LibreríaRenderingStarsDetalle
ApexChartsSVG · MIT14.9kZoom/pan/scroll/anotaciones, >12 tipos, mixed charts. Techo SVG ~miles de puntos. Dashboards atractivos rápido.
NivoCanvas/SVG/HTML · MIT13.8kReact sobre D3, SSR con react-spring, playground en nivo.rocks. Defaults fuertes.
ChartkickDelegado · MIT1.2k"One line of JavaScript" sobre Chart.js/Google/Highcharts. Multi-lenguaje (Vue, React, Python, Ruby…).

🏢 Comerciales: Flexmonster · WebDataRocks · amCharts · CanvasJS · Highcharts · ZoomCharts

LibreríaRenderingLicenciaDetalle
FlexmonsterPivot+charts$0 trial → $799+Hasta 1GB/1M registros; JSON, CSV, SQL, MongoDB, ES, MSAS. Pivotes enterprise.
WebDataRocksPivot+chartsFreeDel equipo de Flexmonster; 1MB, solo CSV/JSON. Pequeños y prototipos.
amChartsCanvas (v5)Free+backlink / $90–180Pulido visual (Apple, Amazon, NASA). ~400KB core, TS completo. Mapas, Sankey, treemap.
CanvasJSCanvasComercial"10x más rápido"; 100k+ puntos. >30 tipos. Faltan network/sparklines/gauges.
HighchartsSVG + boostComercial (free edu)80 de las top 100 empresas. Stock, maps, Gantt. boost = millones de puntos. ~76% TS.
ZoomChartsCanvasComercialMulti-touch (Time/Net/Geo/Pie/Face). Exploración touch-first.
⚠️ Licencias ANTES de construir: 4 de 15 son comerciales y 1 es free con backlink (decisión de marca/legal). Los claims de vendor (10x/20x, máximos de puntos) hay que benchmarkear con tus propios datos.

🧬 Vega / Vega-Lite — gramática declarativa

Stars 11.7k · Canvas o SVG · BSD-3 · UW Interactive Data Lab. Spec JSON declarativa: describes QUÉ visualizar y Vega resuelve CÓMO. Vega-Lite es más conciso; ambos compilan al mismo engine. Python vía Altair.

// Vega-Lite spec (declarativo)
{ "mark": "bar",
  "data": { "values": [{a:"A",b:10},{a:"B",b:20}] },
  "encoding": { "x": {"field":"a"}, "y": {"field":"b"} } }

3 · Cómo elegir (8 preguntas en orden)

  1. ¿Qué tipos de charts? (Sankey/Gantt elimina opciones rápidamente)
  2. ¿Tamaño del dataset? — responde con tu peor caso realista
  3. ¿Web, móvil o ambos? — Victory = React Native
  4. ¿Soporte de navegadores? — según tus analíticas
  5. ¿Qué framework? — React → Recharts/Nivo; agnóstico → Chart.js/D3/ECharts
  6. ¿Personalización visual? — D3 = máximo control/esfuerzo
  7. ¿TypeScript? — Recharts, Highcharts, amCharts fuertes
  8. ¿Activa? — GitHub, cadencia, issues, comunidad
💡 Librería vs desde cero: usa librería para charts estándar con tooltips/leyendas/ejes y time-to-market. Construye desde cero solo si el gráfico es un diferenciador competitivo del producto.

4 · Grafo animado — el flujo de decisión

El token 🟠 recorre la decisión en orden. Clic en el gráfico reinicia.

Iniciando…

5 · Claves y referencia

DecisiónOpción recomendada
Charts estándarChart.js
Escala (millones de puntos)Apache ECharts
ReactRecharts o Nivo
El gráfico es el productoD3.js
React Native cross-platformVictory
Enterprise con soporteHighcharts / amCharts
Declarativa / análisisVega / Vega-Lite
📦 Regla de librerías (local primero): revisar C:\Users\TUF\Documents\librerías\local\ antes de descargar. Fuente: https://www.monterail.com/blog/javascript-libraries-data-visualization. Se enlaza con el catálogo de 66: D3.js, Chart.js y Highcharts están en ambos.