PTENES
MÓDULO 2.3

📊 D3.js — el dato es el contenido

Estándar de visualización de datos. Los datos estáticos se convierten en animaciones potentes: tú proporcionas el conjunto de datos y describes el aspecto visual, Claude hace el resto.

6
Temas
~40
Minutos
📊
Basado en datos
⚡
Intermedio
1

🌐 Qué es D3 y por qué es el estándar

Data-Driven Documents — D3 vincula datos directamente a elementos DOM/SVG. No es una biblioteca de "gráficos listos"; es un mecanismo para transformar datos en formas visuales. Esto ofrece una flexibilidad imposible con Chart.js u otros.

📄 Dato [ 42, 78, 55, 91 ] ⚙️ D3 binding selectAll + data() 🎨 SVG/DOM <rect height="42px"> + transition()

🧠 El paradigma central

En D3, no dices «dibuja una barra de 42px». Dices "vincula este array al conjunto de rectángulos" — y D3 asigna automáticamente cada valor a un atributo SVG mediante scales. Cambia el dato y el aspecto cambia también.

selectAll()
Selecciona elementos
.data()
Vincula el array
.enter()
Elementos nuevos
escalas
Datos → píxeles
2

🏁 Bar race — ranking en movimiento

O bar race (carrera de barras) es el gráfico más impactante para las comparaciones temporales. Cada categoría gana tiempo en pantalla proporcional a su valor, y cuando cambia el ranking, las barras se reordenan suavemente.

demostración en vivo — bar race
Brasil
🇧🇷
EE. UU.
🇺🇸
China
🇨🇳
India
🇮🇳
Europa
🇪🇺

↑ Las barras crecen y se encogen con el tiempo; en D3+Remotion, cada frame = interpolación entre dos estados de datos

cómo pedirle a Claude
// Prompt:
"Crie um bar race Remotion com D3.js mostrando evolução
 anual de 5 países. Dados: [ { ano: 2020, brasil: 42, ... } ]
 Duração: 10s, fps: 30, transição suave entre anos."

// D3 + Remotion equivalente:
const t = frame / fps; // tempo atual
const current = interpolateData(data, t);
bars.attr("width", d => xScale(current[d.name]));
interpolación
Entre dos snapshots
xScale
Valor → ancho px
frame/fps
Tiempo de Remotion
reordenamiento
yScale dinámico
3

🏗️ Diagrama de arquitectura animado

Los nodos aparecen en secuencia y las líneas se dibujan conectando la topología. El stroke-dashoffset es la técnica: defines la longitud total de la línea y animas el offset de 100% → 0% — efecto de "dibujo progresivo".

demostración en vivo — línea dibujándose
Client Auth API DB Server

↑ Los nodos aparecen uno a uno; las líneas se dibujan mediante un stroke-dashoffset animado

💡 Técnica stroke-dashoffset

Define stroke-dasharray: PATH_LENGTH y anima stroke-dashoffset de PATH_LENGTH hasta 0. La línea parece dibujarse en tiempo real. En Remotion, usa interpolate(frame, [0, totalFrames], [pathLen, 0]).

dasharray
Longitud total
dashoffset
Cuánto está oculto
getLength()
Longitud real del path
sequential
Un nodo a la vez
4

🤖 Datos limpios + descripción clara = Claude hace el resto

No necesitas saber D3 para usar D3. Necesitas saber lo que quieres mostrar. El flujo es: limpiar el dato → describir el aspecto visual → Claude genera el componente Remotion completo con D3.

✗ Prompt sin contexto de datos

"Crea un gráfico animado de ventas"

Claude va a inventar datos ficticios, elegir el tipo de chart al azar y probablemente usar la biblioteca equivocada.

✓ Prompt con datos reales

"Remotion + D3. Datos: [{mes:'Jan',valor:42},{mes:'Fev',valor:78}...]. Bar race vertical. La barra crece del frame 0 al 60. Color: #3b82f6."

Resultado exacto, medible y editable.

1

Limpiar el dato

CSV → JSON, eliminar nulos, normalizar nombres de columnas. Claude también lo hace si pegas la hoja de cálculo.

2

Describir el aspecto visual

Tipo de gráfico, paleta de colores, duración, transiciones. Cuanto más específico, más preciso será el resultado.

3

Claude genera el componente

Remotion + D3 + escalas + animación + seek sincronizado. Listo para ejecutarse con npx remotion dev.

4

Iterar en la conversación

"Aumenta el tamaño de fuente del label", "cambia el color de la barra de Brasil a azul", "agrega una línea de promedio". Cada pedido refina el componente.

CSV/JSON
Proporciona el dato
Especificación
Visual + duración
Iteración
Ajuste rápido
Resultado
MP4 exportable
5

🗃️ Casos de uso basados en datos

D3 no se limita a las barras. La biblioteca abarca cualquier tipo de visualización, desde mapas geográficos hasta árboles jerárquicos. La clave es identificar cuál tipo de dato tienes y qué forma visual lo comunica mejor.

📊

Bar race / gráficos

Comparaciones temporales, rankings, métricas de negocio. Datos: series temporales categóricas.

🏗️

Diagramas de arquitectura

Nodos y aristas. Force layout o posicionamiento manual. Datos: grafo/topología de un sistema.

🗺️

Mapas geográficos

Rutas, choropleth (mapa de calor), puntos de interés. Datos: GeoJSON + topojson.

🌲

Jerarquías / treemaps

Estructuras padre-hijo, presupuestos, taxonomías. Datos: árbol JSON con parent/children.

📈

Líneas de tendencia

Crecimiento a lo largo del tiempo, comparaciones de curvas. Datos: series continuas.

🌐

Network graphs

Conexiones entre entidades, flujos de datos y redes sociales. Datos: nodes + edges.

Temporal
Bar race / líneas
Geo
Mapas + GeoJSON
Jerárquico
Treemap / sunburst
Relacional
Force graph
6

⚠️ Errores comunes con D3 + Remotion

D3 se creó para el navegador: manipula el DOM directamente. Remotion renderiza del lado del servidor (headless). Esta combinación tiene trampas específicas que necesitas conocer.

✗ Errores frecuentes

  • ✗Usar d3.transition() — provoca una animación basada en clock, no en frame.
  • ✗Seleccionar el DOM en la función de renderizado — D3 manipula el DOM, React administra el DOM. Conflicto.
  • ✗Calcular scales dentro del render: se recalculan en cada frame y perjudica el rendimiento.

✓ El enfoque correcto

  • ✓Usar D3 solo para cálculos (scales, paths, layouts): deja que React renderice.
  • ✓Interpolación manual mediante interpolate(frame, ...) de Remotion.
  • ✓Escala en useMemo — calcula una vez por composición.

💡 Regla D3+Remotion

Usa D3 como calculadora matemática, no como animador. D3 calcula dónde deben estar las cosas; React renderiza; Remotion captura el frame. Cuando le pidas a Claude, especifica: "Usa D3 solo para scales y generadores de paths, no para animación directa".

escalas
D3 calcula
trayectorias
D3 genera SVG path
animación
Remotion interpola
render
React se encarga

📋 Resumen del módulo

Lo que aprendimos

  • ✓D3 vincula datos con elementos visuales: no es una biblioteca de gráficos
  • ✓Bar race = interpolación entre snapshots de datos a lo largo del tiempo
  • ✓stroke-dashoffset anima el «dibujo» de líneas SVG
  • ✓Datos limpios + descripción visual = Claude genera todo
  • ✓D3 como calculadora matemática, no como animador directo
  • ✓Evitar d3.transition() — usar interpolate() de Remotion

Siguiente módulo

🧊 2.4 — Three.js

Escenas 3D renderizadas fotograma a fotograma. Materiales, cámaras y geometría procedural para motion graphics 3D con WebGL.