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: 250Explicació 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,enteriappendper 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,enteriappendper 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: 750Exercici 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
