En aquest tema, aprendrem sobre les escales lineals i ordinals en D3.js. Les escales són una part fonamental de D3.js, ja que ens permeten transformar dades en valors que podem utilitzar per crear visualitzacions. Les escales lineals i ordinals són dues de les escales més utilitzades.
- Escales Lineals
Què és una Escala Lineal?
Una escala lineal és una funció que mapeja un domini d'entrada (valors de dades) a un rang de sortida (valors visuals). Aquesta transformació és lineal, és a dir, els valors es mapejen de manera proporcional.
Creant una Escala Lineal
Per crear una escala lineal en D3.js, utilitzem la funció d3.scaleLinear()
. Aquí teniu un exemple bàsic:
// Creem una escala lineal var escalaLineal = d3.scaleLinear() .domain([0, 100]) // Domini d'entrada .range([0, 500]); // Rang de sortida // Utilitzem l'escala per transformar un valor console.log(escalaLineal(50)); // Sortida: 250
Explicació del Codi
- Creació de l'escala: Utilitzem
d3.scaleLinear()
per crear una nova escala lineal. - Domini: Definim el domini d'entrada amb
.domain([0, 100])
, que significa que els valors de dades van de 0 a 100. - Rang: Definim el rang de sortida amb
.range([0, 500])
, que significa que els valors visuals van de 0 a 500. - Transformació: Utilitzem l'escala per transformar el valor 50, que es mapeja a 250.
Exemple Pràctic: Gràfic de Barres
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Gràfic de Barres amb Escala Lineal</title> <script src="https://d3js.org/d3.v6.min.js"></script> </head> <body> <script> var dades = [10, 20, 30, 40, 50]; var amplada = 500; var alçada = 100; var escalaX = d3.scaleLinear() .domain([0, d3.max(dades)]) .range([0, amplada]); var svg = d3.select("body").append("svg") .attr("width", amplada) .attr("height", alçada); svg.selectAll("rect") .data(dades) .enter().append("rect") .attr("x", 0) .attr("y", (d, i) => i * 20) .attr("width", d => escalaX(d)) .attr("height", 18) .attr("fill", "steelblue"); </script> </body> </html>
Explicació del Codi
- Dades: Definim un conjunt de dades.
- Escala X: Creem una escala lineal per mapejar els valors de dades a l'amplada del gràfic.
- SVG: Creem un element SVG per contenir el gràfic.
- Rectangles: Utilitzem
selectAll
,data
,enter
iappend
per crear rectangles per a cada valor de dades, utilitzant l'escala per definir l'amplada de cada rectangle.
- Escales Ordinals
Què és una Escala Ordinal?
Una escala ordinal mapeja un conjunt de valors discrets (categories) a un conjunt de valors de sortida discrets. És útil per a dades categòriques.
Creant una Escala Ordinal
Per crear una escala ordinal en D3.js, utilitzem la funció d3.scaleOrdinal()
. Aquí teniu un exemple bàsic:
// Creem una escala ordinal var escalaOrdinal = d3.scaleOrdinal() .domain(["petit", "mitjà", "gran"]) // Domini d'entrada .range(["vermell", "groc", "verd"]); // Rang de sortida // Utilitzem l'escala per transformar un valor console.log(escalaOrdinal("mitjà")); // Sortida: "groc"
Explicació del Codi
- Creació de l'escala: Utilitzem
d3.scaleOrdinal()
per crear una nova escala ordinal. - Domini: Definim el domini d'entrada amb
.domain(["petit", "mitjà", "gran"])
, que significa que els valors de dades són categories. - Rang: Definim el rang de sortida amb
.range(["vermell", "groc", "verd"])
, que significa que els valors visuals són colors. - Transformació: Utilitzem l'escala per transformar el valor "mitjà", que es mapeja a "groc".
Exemple Pràctic: Gràfic de Barres Categòric
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Gràfic de Barres amb Escala Ordinal</title> <script src="https://d3js.org/d3.v6.min.js"></script> </head> <body> <script> var dades = ["petit", "mitjà", "gran", "petit", "gran"]; var amplada = 500; var alçada = 100; var escalaX = d3.scaleBand() .domain(dades) .range([0, amplada]) .padding(0.1); var escalaColor = d3.scaleOrdinal() .domain(["petit", "mitjà", "gran"]) .range(["vermell", "groc", "verd"]); var svg = d3.select("body").append("svg") .attr("width", amplada) .attr("height", alçada); svg.selectAll("rect") .data(dades) .enter().append("rect") .attr("x", (d, i) => escalaX(d)) .attr("y", 0) .attr("width", escalaX.bandwidth()) .attr("height", alçada) .attr("fill", d => escalaColor(d)); </script> </body> </html>
Explicació del Codi
- Dades: Definim un conjunt de dades categòriques.
- Escala X: Creem una escala de banda (
scaleBand
) per mapejar les categories a posicions x. - Escala de Color: Creem una escala ordinal per mapejar les categories a colors.
- SVG: Creem un element SVG per contenir el gràfic.
- Rectangles: Utilitzem
selectAll
,data
,enter
iappend
per crear rectangles per a cada valor de dades, utilitzant l'escala de banda per definir la posició x i l'escala de color per definir el color de cada rectangle.
Exercicis Pràctics
Exercici 1: Escala Lineal
Crea una escala lineal que mapeja valors de 0 a 200 a un rang de 0 a 1000. Utilitza aquesta escala per transformar el valor 150.
Solució
var escalaLineal = d3.scaleLinear() .domain([0, 200]) .range([0, 1000]); console.log(escalaLineal(150)); // Sortida: 750
Exercici 2: Escala Ordinal
Crea una escala ordinal que mapeja les categories ["A", "B", "C"] als colors ["blau", "taronja", "marró"]. Utilitza aquesta escala per transformar la categoria "B".
Solució
var escalaOrdinal = d3.scaleOrdinal() .domain(["A", "B", "C"]) .range(["blau", "taronja", "marró"]); console.log(escalaOrdinal("B")); // Sortida: "taronja"
Conclusió
En aquesta secció, hem après sobre les escales lineals i ordinals en D3.js. Les escales són eines poderoses per transformar dades en valors visuals, i són essencials per crear visualitzacions efectives. Hem vist exemples pràctics de com utilitzar aquestes escales per crear gràfics de barres i hem practicat amb exercicis per reforçar els conceptes apresos. En el proper tema, explorarem les escales de temps i logarítmiques.
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