En aquest tema, aprendrem a crear gràfics de barres utilitzant D3.js. Els gràfics de barres són una de les visualitzacions més comunes i útils per representar dades categòriques. A través d'aquest mòdul, veurem com carregar dades, crear escales, i finalment, dibuixar les barres en un gràfic.
- Introducció als Gràfics de Barres
Un gràfic de barres és una representació gràfica de dades en la qual les dades es mostren mitjançant barres rectangulars. La longitud de cada barra és proporcional al valor que representa.
Conceptes Clau:
- Eix X: Representa les categories.
- Eix Y: Representa els valors.
- Barres: Representen les dades.
- Configuració Inicial
HTML Bàsic
Primer, necessitem un fitxer HTML bàsic per contenir el nostre gràfic.
<!DOCTYPE html> <html lang="ca"> <head> <meta charset="UTF-8"> <title>Gràfic de Barres amb D3.js</title> <script src="https://d3js.org/d3.v7.min.js"></script> <style> .bar { fill: steelblue; } .bar:hover { fill: orange; } .axis-label { font-size: 12px; } </style> </head> <body> <svg width="600" height="400"></svg> <script src="bar-chart.js"></script> </body> </html>
JavaScript Bàsic
Creem un fitxer bar-chart.js
on escriurem el codi D3.js.
// Dimensions del gràfic const width = 600; const height = 400; const margin = { top: 20, right: 30, bottom: 40, left: 40 }; // Dades d'exemple const data = [ { category: 'A', value: 30 }, { category: 'B', value: 80 }, { category: 'C', value: 45 }, { category: 'D', value: 60 }, { category: 'E', value: 20 }, { category: 'F', value: 90 }, { category: 'G', value: 55 }, ]; // Crear SVG const svg = d3.select("svg") .attr("width", width) .attr("height", height); // Crear escales const x = d3.scaleBand() .domain(data.map(d => d.category)) .range([margin.left, width - margin.right]) .padding(0.1); const y = d3.scaleLinear() .domain([0, d3.max(data, d => d.value)]).nice() .range([height - margin.bottom, margin.top]); // Afegir eix X svg.append("g") .attr("transform", `translate(0,${height - margin.bottom})`) .call(d3.axisBottom(x)) .attr("class", "axis-label"); // Afegir eix Y svg.append("g") .attr("transform", `translate(${margin.left},0)`) .call(d3.axisLeft(y)) .attr("class", "axis-label"); // Afegir barres svg.selectAll(".bar") .data(data) .enter().append("rect") .attr("class", "bar") .attr("x", d => x(d.category)) .attr("y", d => y(d.value)) .attr("width", x.bandwidth()) .attr("height", d => y(0) - y(d.value));
- Explicació del Codi
Dimensions i Marges
Definim les dimensions del gràfic i els marges per deixar espai per als eixos.
Dades d'Exemple
Utilitzem un conjunt de dades d'exemple per crear el gràfic.
const data = [ { category: 'A', value: 30 }, { category: 'B', value: 80 }, { category: 'C', value: 45 }, { category: 'D', value: 60 }, { category: 'E', value: 20 }, { category: 'F', value: 90 }, { category: 'G', value: 55 }, ];
Crear SVG
Creem un element SVG dins del qual dibuixarem el gràfic.
Crear Escales
Definim les escales per als eixos X i Y.
const x = d3.scaleBand() .domain(data.map(d => d.category)) .range([margin.left, width - margin.right]) .padding(0.1); const y = d3.scaleLinear() .domain([0, d3.max(data, d => d.value)]).nice() .range([height - margin.bottom, margin.top]);
Afegir Eixos
Afegim els eixos X i Y al gràfic.
svg.append("g") .attr("transform", `translate(0,${height - margin.bottom})`) .call(d3.axisBottom(x)) .attr("class", "axis-label"); svg.append("g") .attr("transform", `translate(${margin.left},0)`) .call(d3.axisLeft(y)) .attr("class", "axis-label");
Afegir Barres
Finalment, afegim les barres al gràfic.
svg.selectAll(".bar") .data(data) .enter().append("rect") .attr("class", "bar") .attr("x", d => x(d.category)) .attr("y", d => y(d.value)) .attr("width", x.bandwidth()) .attr("height", d => y(0) - y(d.value));
- Exercicis Pràctics
Exercici 1: Canviar els Colors de les Barres
Modifica el codi per canviar el color de les barres a verd.
Exercici 2: Afegir Etiquetes de Valors
Afegeix etiquetes de text a sobre de cada barra que mostrin el valor corresponent.
Exercici 3: Dades Dinàmiques
Modifica el codi per carregar dades des d'un fitxer CSV.
- Solucions
Solució 1: Canviar els Colors de les Barres
// Canviar el color de les barres a verd svg.selectAll(".bar") .data(data) .enter().append("rect") .attr("class", "bar") .attr("x", d => x(d.category)) .attr("y", d => y(d.value)) .attr("width", x.bandwidth()) .attr("height", d => y(0) - y(d.value)) .attr("fill", "green");
Solució 2: Afegir Etiquetes de Valors
// Afegir etiquetes de text a sobre de cada barra svg.selectAll(".label") .data(data) .enter().append("text") .attr("class", "label") .attr("x", d => x(d.category) + x.bandwidth() / 2) .attr("y", d => y(d.value) - 5) .attr("text-anchor", "middle") .text(d => d.value);
Solució 3: Dades Dinàmiques
// Carregar dades des d'un fitxer CSV d3.csv("data.csv").then(data => { data.forEach(d => { d.value = +d.value; }); // Resta del codi per crear el gràfic });
- Conclusió
En aquest tema, hem après a crear un gràfic de barres bàsic utilitzant D3.js. Hem vist com configurar l'entorn, crear escales, afegir eixos i dibuixar les barres. També hem practicat amb alguns exercicis per reforçar els conceptes apresos. En el següent tema, explorarem com crear altres tipus de gràfics 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