PTENES
MÓDULO 3.2

🌍 World Population Shift (D3)

Animación estilo documental del crecimiento poblacional por país, 1990–2030. Sin D3: tienes números. Con D3: tienes una historia que se desarrolla en tiempo real ante el espectador.

6
Secciones
~45
min
D3
Lib
40
Años de datos
1

📊 Escenario: datos que quieren convertirse en historia

Tienes una hoja de cálculo: país, año, población. Son solo números hasta que D3 los convierte en barras que crecen, cambian de posición y revelan el drama geopolítico de cuatro décadas. El espectador no lee la tabla — la ve suceder.

¿Por qué D3 para este proyecto?

D3 es la única biblioteca del stack con escalas nativas (linear, band, time) y gestión de transiciones de datos. No calculas píxeles manualmente: defines el dominio y el rango, y D3 resuelve la geometría. GSAP animaría lo visual, pero no entendería los datos.

✓ D3 es ideal cuando…

Conjunto de datos que cambia con el tiempo
Ejes, rankings y escalas automáticas
Reutilizar con distintos datasets

✗ D3 no es la mejor opción cuando…

Narrativa sin datos (→ GSAP)
Escenas 3D (→ Three.js)
Microanimaciones de app (→ Lottie)
scaleLinear
píxeles automáticos
scaleBand
posición de las barras
sort
ranking dinámico
interpolate
transición fluida
2

🏃 Bar Race: el corazón del proyecto

En cada frame de Remotion, se lee el dataset del año correspondiente, las barras se reordenan y las posiciones Y se interpolan suavemente. Cuando China e India intercambian lugares, el bar race pausa de 12 fotogramas — el momento dramático.

bar race — demostración en vivo
2015
1 China
1.41B
2 India
1.43B
3 EE. UU.
335M
4 Indonesia
277M
5 Pakistán
231M

💡 La pausa dramática

Cuando cambia el liderazgo, agrega 12 frames de pausa antes de reordenar. Es el equivalente cinematográfico de un primer plano: le da al espectador tiempo para procesar lo que acaba de pasar.

Orden dinámico
en cada frame
Pausa de 12f
cambio de líder
Interpolación
posición Y suave
Drama
tensión visual
3

📐 Escalas de D3 en el contexto de Remotion

La integración D3+Remotion funciona porque D3 calcula la geometría y Remotion avanza en el tiempo. En cada llamada de useCurrentFrame(), calculas el frame de datos correspondiente y dejas que D3 mapee los píxeles.

patrón de integración D3 + Remotion
const frame = useCurrentFrame();
const fps = useVideoConfig().fps;
const year = Math.floor(interpolate(frame, [0, durationInFrames], [1990, 2030]));

const data = getDataForYear(year);
const xScale = scaleLinear().domain([0, maxPop]).range([0, width]);
const yScale = scaleBand().domain(data.map(d => d.country)).range([0, height]);
useCurrentFrame frame → año Conjunto de datos getDataForYear() Escalas D3 domain → range Sort + Rank posición Y Barras SVG fotograma renderizado Pipeline determinista: el mismo frame siempre produce el mismo resultado
Determinístico
El mismo frame = el mismo resultado
Domain
[0, maxPopulation]
Rango
[0, width]
Sin estado
Puro cálculo
4

🏷️ Etiquetas, año y legibilidad en movimiento

Las etiquetas que siguen a las barras son el alma de la carrera de barras. El contador de año en la esquina inferior derecha sitúa al espectador en el tiempo. Ambos deben calcularse en el mismo frame, sin un estado separado.

✓ Buenas prácticas para etiquetas

Label posicionado con X = ancho de la barra + 6px
Valor formateado: "1.4B", no "1,410,000,000"
Color de la etiqueta = color de la barra, alpha 0.9

✗ Errores comunes

Label fijo en el eje: queda atrás cuando la barra crece
Número completo — ilegible en movimiento rápido
Un solo color para todos — se pierde la identidad del país

💡 Contador de año como ancla

El año grande en la esquina es la brújula del espectador. Tamaño mínimo: 64px, opacidad 0.5–0.7 para que no compita con las barras. Usa font-variant-numeric: tabular-nums para evitar que los dígitos «salten» al cambiar.

Follow label
x = bar.width + 6
Format "1.4B"
legible en movimiento
tabular-nums
sin saltos de dígitos
Color por país
identidad persistente
5

💬 El prompt completo

Este es el prompt literal que le das a Claude Code. Cada instrucción corresponde a un comportamiento específico de la bar race: Claude genera la composición Remotion con D3 integrado en una sola respuesta.

prompt — copia y usa
Create an animated bar race showing the ten most populous
countries from 1990 to 2030.
Animate transitions smoothly.
Display ranking changes in real time.
Pause briefly when leadership changes.

💡 ¿Por qué «Pause briefly when leadership changes»?

Esta instrucción específica hace que Claude implemente la pausa dramática. Sin ella, la reordenación ocurre de forma continua y pasa desapercibida. Con ella, el espectador tiene el momento cinematográfico de «¡espera, India superó a China!»

"bar race"
patrón reconocido
"smoothly"
transiciones fluidas
"real time"
labels sincronizados
"pause"
drama explícito
6

♻️ Entregable y reutilización

El entregable es un video infográfico al estilo de YouTube, pero el componente es una plantilla parametrizada que funciona con cualquier conjunto de datos de rankings temporales. Cambia la hoja de cálculo, modifica el título y renderiza otro video.

Orden de build: de la hoja de cálculo al video

1

Preparar el dataset

JSON array de objetos {country, year, population}. Datos de 1990, 2000, 2010, 2020, 2030. Interpola los años intermedios.

2

Montar escalas y estático

Valida que las barras aparezcan en el tamaño correcto, sin animación. Confirma que el ranking del año 1990 sea correcto.

3

Conectar el frame al tiempo

Usa interpolate() para mapear frame → año. Agrega la pausa en los años de cambio de liderazgo.

4

Pulido: colores, tipografía, música

Agrega la identidad visual de cada país, una fuente en negrita para los números y una pista sonora dramática (Trilha 4).

YouTube
infografía viral
Finanzas
ranking de ingresos
Deportes
tabla de puntos
Política
aprobación presidencial

📋 Resumen del Módulo 3.2

← SaaS Walkthrough Siguiente: Motorcycle Commercial →