En aquest tema, aprendrem com enllaçar dades als elements del DOM utilitzant D3.js. Aquest és un concepte fonamental en D3.js, ja que permet crear visualitzacions dinàmiques i interactives basades en dades.
Objectius
- Entendre el concepte d'enllaç de dades en D3.js.
- Aprendre a utilitzar les funcions
data(),enter(),update()iexit(). - Crear exemples pràctics d'enllaç de dades.
Conceptes Clau
Enllaç de Dades
L'enllaç de dades és el procés d'associar dades a elements del DOM. D3.js facilita aquest procés amb la funció data(), que permet associar un conjunt de dades a una selecció d'elements.
Funcions Clau
data(dataArray): Enllaça un conjunt de dades a una selecció d'elements.enter(): Crea nous elements per a les dades que no tenen un element corresponent en la selecció actual.update(): Actualitza els elements existents amb les dades noves.exit(): Elimina els elements que ja no tenen dades associades.
Exemple Pràctic
Pas 1: Preparar l'Entorn
Assegura't de tenir un fitxer HTML amb un element <svg> on dibuixarem els nostres elements.
<!DOCTYPE html>
<html lang="ca">
<head>
<meta charset="UTF-8">
<title>Enllaçant Dades amb D3.js</title>
<script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
<svg width="500" height="300"></svg>
<script src="script.js"></script>
</body>
</html>Pas 2: Enllaçar Dades als Elements
script.js
// Seleccionem l'element SVG
const svg = d3.select("svg");
// Dades d'exemple
const data = [10, 20, 30, 40, 50];
// Enllacem les dades als cercles
const circles = svg.selectAll("circle")
.data(data);
// Utilitzem enter() per crear nous cercles per a les dades noves
circles.enter()
.append("circle")
.attr("cx", (d, i) => (i * 50) + 25) // Posició horitzontal
.attr("cy", 150) // Posició vertical
.attr("r", d => d) // Radi basat en les dades
.attr("fill", "blue");Explicació del Codi
- Selecció de l'element SVG: Utilitzem
d3.select("svg")per seleccionar l'element SVG on dibuixarem els cercles. - Dades d'exemple: Definim un array de dades
[10, 20, 30, 40, 50]. - Enllaç de dades: Utilitzem
svg.selectAll("circle").data(data)per enllaçar les dades als cercles. Com que inicialment no hi ha cercles, la selecció estarà buida. - Creació de nous elements: Utilitzem
enter()per crear nous cercles per a cada element de dades. Els atributscx,cy,rifilles defineixen basant-se en les dades.
Pas 3: Actualitzar i Eliminar Elements
script.js (continuació)
// Dades noves
const newData = [15, 25, 35];
// Enllacem les dades noves als cercles
const updatedCircles = svg.selectAll("circle")
.data(newData);
// Actualitzem els cercles existents
updatedCircles
.attr("r", d => d)
.attr("fill", "green");
// Eliminem els cercles que ja no tenen dades associades
updatedCircles.exit().remove();Explicació del Codi
- Dades noves: Definim un nou array de dades
[15, 25, 35]. - Enllaç de dades noves: Utilitzem
svg.selectAll("circle").data(newData)per enllaçar les dades noves als cercles existents. - Actualització d'elements: Utilitzem
updatedCircles.attr("r", d => d).attr("fill", "green")per actualitzar els cercles existents amb les noves dades. - Eliminació d'elements: Utilitzem
updatedCircles.exit().remove()per eliminar els cercles que ja no tenen dades associades.
Exercicis Pràctics
Exercici 1: Crear Rectangles
Crea un conjunt de rectangles en un element SVG basant-te en un array de dades. Cada rectangle ha de tenir una amplada basada en les dades.
Solució
const svg = d3.select("svg");
const data = [10, 20, 30, 40, 50];
const rectangles = svg.selectAll("rect")
.data(data);
rectangles.enter()
.append("rect")
.attr("x", (d, i) => i * 60)
.attr("y", 50)
.attr("width", d => d)
.attr("height", 40)
.attr("fill", "orange");Exercici 2: Actualitzar i Eliminar Rectangles
Actualitza els rectangles existents amb un nou conjunt de dades i elimina els rectangles que ja no tenen dades associades.
Solució
const newData = [15, 25, 35];
const updatedRectangles = svg.selectAll("rect")
.data(newData);
updatedRectangles
.attr("width", d => d)
.attr("fill", "purple");
updatedRectangles.exit().remove();Resum
En aquest tema, hem après com enllaçar dades als elements del DOM utilitzant D3.js. Hem vist com utilitzar les funcions data(), enter(), update() i exit() per crear, actualitzar i eliminar elements basats en dades. Aquests conceptes són fonamentals per crear visualitzacions dinàmiques i interactives amb D3.js.
D3.js: De Principiant a Avançat
Mòdul 1: Introducció a D3.js
Mòdul 2: Treballant amb Seleccions
Mòdul 3: Dades i Escales
- Carregant i Analitzant Dades
- Utilitzant Escales de D3
- Escales Lineals i Ordinals
- Escales de Temps i Logarítmiques
Mòdul 4: Creant Visualitzacions Bàsiques
- Creant Gràfics de Barres
- Creant Gràfics de Línies
- Creant Gràfics de Pastís
- Creant Gràfics de Dispersió
Mòdul 5: Visualitzacions Avançades
- Creant Disposicions Jeràrquiques
- Creant Disposicions de Força
- Creant Mapes Geo
- Creant Visualitzacions Personalitzades
Mòdul 6: Interactivitat i Animació
Mòdul 7: Treballant amb Dades Reals
- Recuperant Dades d'APIs
- Neteja i Transformació de Dades
- Integració amb Altres Llibreries
- Estudis de Cas i Exemples
Mòdul 8: Rendiment i Optimització
- Optimitzant el Rendiment de D3.js
- Gestionant Grans Conjunts de Dades
- Enllaç de Dades Eficient
- Depuració i Resolució de Problemes
Mòdul 9: Millors Pràctiques i Tècniques Avançades
- Organització del Codi i Modularitat
- Components Reutilitzables
- Patrons Avançats de D3.js
- Contribuint a la Comunitat de D3.js
