En aquest tema, aprendrem a crear gràfics de línies utilitzant D3.js. Els gràfics de línies són una eina poderosa per visualitzar dades temporals o seqüencials, mostrant la tendència d'una variable al llarg del temps.
Objectius
- Entendre els conceptes bàsics dels gràfics de línies.
- Aprendre a crear un gràfic de línies bàsic amb D3.js.
- Personalitzar el gràfic de línies amb estils i interactivitat.
Conceptes Bàsics
Què és un Gràfic de Línies?
Un gràfic de línies és una representació gràfica de dades on els punts de dades estan connectats per línies. És especialment útil per mostrar tendències al llarg del temps.
Components d'un Gràfic de Línies
- Eixos: Generalment, l'eix X representa el temps o una altra variable independent, mentre que l'eix Y representa la variable dependent.
- Línia: Connecta els punts de dades.
- Punts de Dades: Representen els valors individuals en el gràfic.
Exemple Pràctic: Creant un Gràfic de Línies
Pas 1: Configuració de l'Entorn
Assegura't de tenir un fitxer HTML amb D3.js inclòs. Aquí tens un exemple bàsic:
<!DOCTYPE html> <html lang="ca"> <head> <meta charset="UTF-8"> <title>Gràfic de Línies amb D3.js</title> <script src="https://d3js.org/d3.v7.min.js"></script> <style> .line { fill: none; stroke: steelblue; stroke-width: 2px; } </style> </head> <body> <svg width="800" height="400"></svg> <script src="line-chart.js"></script> </body> </html>
Pas 2: Preparació de les Dades
Les dades han de ser un array d'objectes amb valors per a l'eix X i l'eix Y. Per exemple:
const data = [ { date: new Date(2023, 0, 1), value: 30 }, { date: new Date(2023, 0, 2), value: 50 }, { date: new Date(2023, 0, 3), value: 45 }, { date: new Date(2023, 0, 4), value: 60 }, { date: new Date(2023, 0, 5), value: 70 } ];
Pas 3: Creació de l'SVG i Escales
Configura l'SVG i les escales per als eixos X i Y.
const svg = d3.select("svg"); const margin = { top: 20, right: 30, bottom: 30, left: 40 }; const width = +svg.attr("width") - margin.left - margin.right; const height = +svg.attr("height") - margin.top - margin.bottom; const x = d3.scaleTime() .domain(d3.extent(data, d => d.date)) .range([0, width]); const y = d3.scaleLinear() .domain([0, d3.max(data, d => d.value)]) .range([height, 0]); const g = svg.append("g") .attr("transform", `translate(${margin.left},${margin.top})`);
Pas 4: Afegir els Eixos
Afegeix els eixos X i Y al gràfic.
g.append("g") .attr("transform", `translate(0,${height})`) .call(d3.axisBottom(x)); g.append("g") .call(d3.axisLeft(y));
Pas 5: Dibuixar la Línia
Defineix la línia i afegeix-la al gràfic.
const line = d3.line() .x(d => x(d.date)) .y(d => y(d.value)); g.append("path") .datum(data) .attr("class", "line") .attr("d", line);
Codi Complet
Aquí tens el codi complet per crear un gràfic de línies bàsic:
const data = [ { date: new Date(2023, 0, 1), value: 30 }, { date: new Date(2023, 0, 2), value: 50 }, { date: new Date(2023, 0, 3), value: 45 }, { date: new Date(2023, 0, 4), value: 60 }, { date: new Date(2023, 0, 5), value: 70 } ]; const svg = d3.select("svg"); const margin = { top: 20, right: 30, bottom: 30, left: 40 }; const width = +svg.attr("width") - margin.left - margin.right; const height = +svg.attr("height") - margin.top - margin.bottom; const x = d3.scaleTime() .domain(d3.extent(data, d => d.date)) .range([0, width]); const y = d3.scaleLinear() .domain([0, d3.max(data, d => d.value)]) .range([height, 0]); const g = svg.append("g") .attr("transform", `translate(${margin.left},${margin.top})`); g.append("g") .attr("transform", `translate(0,${height})`) .call(d3.axisBottom(x)); g.append("g") .call(d3.axisLeft(y)); const line = d3.line() .x(d => x(d.date)) .y(d => y(d.value)); g.append("path") .datum(data) .attr("class", "line") .attr("d", line);
Exercicis Pràctics
Exercici 1: Afegir Punts de Dades
Afegeix cercles per a cada punt de dades al gràfic de línies.
Solució:
g.selectAll(".dot") .data(data) .enter().append("circle") .attr("class", "dot") .attr("cx", d => x(d.date)) .attr("cy", d => y(d.value)) .attr("r", 5);
Exercici 2: Afegir Interactivitat
Afegeix interactivitat perquè els punts de dades mostrin un tooltip amb el valor quan es passa el ratolí per sobre.
Solució:
const tooltip = d3.select("body").append("div") .attr("class", "tooltip") .style("opacity", 0); g.selectAll(".dot") .data(data) .enter().append("circle") .attr("class", "dot") .attr("cx", d => x(d.date)) .attr("cy", d => y(d.value)) .attr("r", 5) .on("mouseover", function(event, d) { tooltip.transition() .duration(200) .style("opacity", .9); tooltip.html(`Data: ${d.date}<br>Valor: ${d.value}`) .style("left", (event.pageX + 5) + "px") .style("top", (event.pageY - 28) + "px"); }) .on("mouseout", function(d) { tooltip.transition() .duration(500) .style("opacity", 0); });
Resum
En aquest tema, hem après a crear un gràfic de línies bàsic amb D3.js, incloent-hi la configuració de l'entorn, la preparació de les dades, la creació de l'SVG i les escales, l'afegit dels eixos i el dibuix de la línia. També hem vist com afegir punts de dades i interactivitat per millorar la visualització.
En el següent tema, explorarem com crear gràfics de pastís 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