En este tema, aprenderemos a crear diagramas de dispersión utilizando D3.js. Los diagramas de dispersión son útiles para visualizar la relación entre dos variables continuas. A lo largo de esta sección, cubriremos los siguientes puntos:
- Preparación del entorno y datos
- Creación de escalas y ejes
- Dibujado de puntos en el diagrama
- Añadiendo interactividad básica
- Preparación del entorno y datos
Configuración del entorno
Antes de comenzar, asegúrate de tener un entorno de desarrollo configurado con D3.js. Puedes incluir D3.js en tu proyecto mediante un CDN:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Scatter Plot with D3.js</title> <script src="https://d3js.org/d3.v7.min.js"></script> </head> <body> <div id="scatter-plot"></div> <script src="scatter-plot.js"></script> </body> </html>
Datos de ejemplo
Para este ejemplo, utilizaremos un conjunto de datos simple que contiene pares de valores (x, y):
const data = [ {x: 30, y: 20}, {x: 50, y: 90}, {x: 80, y: 50}, {x: 90, y: 80}, {x: 100, y: 60}, {x: 120, y: 40}, {x: 140, y: 70}, {x: 160, y: 100}, {x: 180, y: 30}, {x: 200, y: 50} ];
- Creación de escalas y ejes
Definiendo las escalas
Las escalas en D3.js nos ayudan a mapear los datos a coordenadas en el SVG. Utilizaremos escalas lineales para ambos ejes:
const width = 500; const height = 400; const margin = {top: 20, right: 30, bottom: 40, left: 50}; const xScale = d3.scaleLinear() .domain([0, d3.max(data, d => d.x)]) .range([margin.left, width - margin.right]); const yScale = d3.scaleLinear() .domain([0, d3.max(data, d => d.y)]) .range([height - margin.bottom, margin.top]);
Creando los ejes
Ahora, crearemos los ejes utilizando las escalas definidas:
const svg = d3.select("#scatter-plot") .append("svg") .attr("width", width) .attr("height", height); const xAxis = d3.axisBottom(xScale); const yAxis = d3.axisLeft(yScale); svg.append("g") .attr("transform", `translate(0, ${height - margin.bottom})`) .call(xAxis); svg.append("g") .attr("transform", `translate(${margin.left}, 0)`) .call(yAxis);
- Dibujado de puntos en el diagrama
Añadiendo los puntos
Para dibujar los puntos en el diagrama de dispersión, utilizaremos elementos <circle>
en SVG:
svg.selectAll("circle") .data(data) .enter() .append("circle") .attr("cx", d => xScale(d.x)) .attr("cy", d => yScale(d.y)) .attr("r", 5) .attr("fill", "blue");
- Añadiendo interactividad básica
Añadiendo eventos de mouse
Podemos añadir interactividad básica, como mostrar información al pasar el mouse sobre los puntos:
svg.selectAll("circle") .on("mouseover", function(event, d) { d3.select(this) .attr("fill", "orange") .attr("r", 7); svg.append("text") .attr("id", "tooltip") .attr("x", xScale(d.x) + 10) .attr("y", yScale(d.y) - 10) .text(`(${d.x}, ${d.y})`); }) .on("mouseout", function(event, d) { d3.select(this) .attr("fill", "blue") .attr("r", 5); d3.select("#tooltip").remove(); });
Resumen
En esta sección, hemos aprendido a crear un diagrama de dispersión básico utilizando D3.js. Hemos cubierto cómo preparar el entorno y los datos, crear escalas y ejes, dibujar puntos y añadir interactividad básica. Con estos conocimientos, estás listo para explorar visualizaciones más complejas y personalizadas.
En el siguiente módulo, profundizaremos en visualizaciones avanzadas, como diseños jerárquicos y mapas geográficos. ¡Sigue adelante y sigue aprendiendo!
D3.js: De Principiante a Avanzado
Módulo 1: Introducción a D3.js
Módulo 2: Trabajando con Selecciones
- Entendiendo las Selecciones
- Seleccionando Elementos del DOM
- Modificando Elementos
- Vinculando Datos a Elementos
Módulo 3: Datos y Escalas
- Cargando y Analizando Datos
- Usando Escalas de D3
- Escalas Lineales y Ordinales
- Escalas de Tiempo y Logarítmicas
Módulo 4: Creando Visualizaciones Básicas
- Creando Gráficos de Barras
- Creando Gráficos de Líneas
- Creando Gráficos de Pastel
- Creando Diagramas de Dispersión
Módulo 5: Visualizaciones Avanzadas
- Creando Diseños Jerárquicos
- Creando Diseños de Fuerza
- Creando Mapas Geográficos
- Creando Visualizaciones Personalizadas
Módulo 6: Interactividad y Animación
Módulo 7: Trabajando con Datos Reales
- Obteniendo Datos de APIs
- Limpieza y Transformación de Datos
- Integración con Otras Bibliotecas
- Estudios de Caso y Ejemplos
Módulo 8: Rendimiento y Optimización
- Optimizando el Rendimiento de D3.js
- Manejando Grandes Conjuntos de Datos
- Vinculación de Datos Eficiente
- Depuración y Solución de Problemas
Módulo 9: Mejores Prácticas y Técnicas Avanzadas
- Organización del Código y Modularidad
- Componentes Reutilizables
- Patrones Avanzados de D3.js
- Contribuyendo a la Comunidad de D3.js