Antoine Béland
11 octobre 2018
const svg = d3.select('svg')
const data = [15, 8, 42, 4];
// (1) Sélection et association des données
const rectangles = svg.selectAll('rect')
.data(data);
enter
pour les créer
enter
une fois la sélection effectuée
// (1) Sélection et association des données
const rectangles = svg.selectAll('rect')
.data(data);
// (2) Création des nouveaux éléments
const rectanglesCreated = rectangles.enter()
.append('rect')
.attr('height', d => d)
.style('fill', 'green');
enter
tandis que l'autre sera uniquement mise à jour
// (1) Sélection et association des données
const rectangles = svg.selectAll('rect')
.data(data[index])
.style('fill', 'gray');
// (2) Création des nouveaux éléments
const rectanglesCreated = rectangles.enter()
.append('rect')
.style('fill', 'green');
// (3) Mise à jour des nouveaux éléments et de ceux existants
rectangles.merge(rectanglesCreated)
.attr('height', d => d);
exit
exit
pour supprimer la barre superflue
// (1) Sélection et association des données
const rectangles = svg.selectAll('rect')
.data(data[index])
.style('fill', 'gray');
// (2) Création des nouveaux éléments
const rectanglesCreated = rectangles.enter()
.append('rect')
.style('fill', 'green');
// (3) Mise à jour des nouveaux éléments et de ceux existants
rectangles.merge(rectanglesCreated)
.attr('height', d => d);
// (4) Suppression des éléments en trop
rectangles.exit()
.remove();
function update(currentData) {
// (1) Sélection et association des données
const rectangles = svg.selectAll('rect')
.data(currentData)
.style('fill', 'gray');
// (2) Création des nouveaux éléments
const rectanglesCreated = rectangles.enter()
.append('rect')
.style('fill', 'green');
// (3) Mise à jour des nouveaux éléments et de ceux existants
rectangles.merge(rectanglesCreated)
.attr('height', d => d);
// (4) Suppression des éléments en trop
rectangles.exit()
.remove();
}
Démo
transition
de D3.js
attr
ou
style
pour réaliser une transition vers les nouvelles valeurs réglées
const svg = d3.select('svg');
const circle = svg.append('circle')
.attr('cx', 50)
.attr('cy', 50)
.attr('r', 50)
.style('fill', 'green');
circle.transition()
.delay(1000)
.duration(750)
.attr('cx', 950)
.style('fill', 'red');
Démo
function update(currentData) {
/* ... */
// (3) Mise à jour des nouveaux éléments et de ceux existants
rectangles.merge(rectanglesCreated)
.transition()
.duration(500)
.attr('x', d => x(d))
.attr('y', d => HEIGHT - y(d))
.attr('width', d => x.bandwidth())
.attr('height', d => y(d));
/* ... */
}
Démo
Arbre et cluster |
Carte proportionnelle (treemap) |
Diagramme à cordes (chord diagram) |
Diagrammes circulaires (pie charts et donut charts) |
Histogramme |
Pack |
Images tirées de The Data Visualisation Catalogue
// ...
const arc = d3.arc()
.innerRadius(0) // Modifier le "innerRadius" pour un donut chart
.outerRadius(radius);
const arcs = d3.pie()(data);
g.selectAll('path')
.data(arcs)
.enter()
.append('path')
.attr('d', arc)
.style('fill', (d, i) => color(i));
Démo
d3.histogram
permet de répartir les données selon les bons intervalles
d3.histogram
configurée,
il faut l'appeler avec les données à diviser
Array[Array]
)
x0
et x1
, correspondant
au minimum et maximum de l'intervalle
// ...
const histogram = d3.histogram()
.domain(x.domain())
.thresholds(5);
const bins = histogram(data);
svg.selectAll('rect')
.data(bins)
.enter()
.append('rect')
.attr('x', d => x(d.x0))
.attr('y', d => HEIGHT - y(d.length))
.attr('width', d => x(d.x1) - x(d.x0))
.attr('height', d => y(d.length));
Démo
d3.pack
permet de générer facilement les positions et les rayons des cercles à dessiner
size
et
padding
d3.hierarchy
(root)
cx
,
cy
, r
et data
.
// ...
const pack = d3.pack().size([width, height]);
const root = d3.hierarchy(data).sum(d => d.data.population);
const nodes = root.descendants();
pack(root);
svg.selectAll('circle')
.data(nodes)
.enter()
.append('circle')
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', d => d.r);
Données
Démo
* Google Chrome bloque les requêtes asynchrones réalisées dans un fichier local si celui-ci n'est pas hébergé sur un serveur local