barplot5 = {
let w = 650;
let h = 300;
let pad = 30;
let div = d3.create("div").style("position", "relative");
let svg = div.append("svg").attr("viewBox", [0, 0, w, h]);
let tableau_temporaire = Array.from(certificatesByCountryNorm)
let pays_normes = {}
tableau_temporaire.forEach((pays) => {
pays_normes[pays[0]] = {}
for (const normes of pays[1]) {
pays_normes[pays[0]][normes[0]] = normes[1]
}
})
let pays_normes_tries = []
for (const [pays, normes] of Object.entries(pays_normes)) {
if (NormeSelectionne in normes) {
pays_normes_tries.push({
pays: pays,
[NormeSelectionne]: normes[NormeSelectionne]
})
} else {
pays_normes_tries.push({
pays: pays,
[NormeSelectionne]: 0
})
}
}
pays_normes_tries.sort((a, b) => b[NormeSelectionne] - a[NormeSelectionne])
let countries = pays_normes_tries.slice(0, num_countries_to_show);
console.log(countries)
// Récupérer toutes les abréviations ISO3 des pays
let iso3Countries = MasterFile.map(entry => entry.ISO3);
iso3Countries = [... new Set(iso3Countries)]
// Créer une Map pour stocker la correspondance entre les abréviations ISO3 et les noms complets des pays
let countryNameMap = new Map();
MasterFile.forEach(entry => {
countryNameMap.set(entry.ISO3, entry.Country);
});
let x_scale = d3
.scaleBand()
.domain(countries.map(d => d.pays))
.range([pad, w - pad])
.padding(0.2);
// Calculer le nombre maximal de certificats pour la norme sélectionnée
let max = d3.max(countries.map(d => d[NormeSelectionne]));
console.log(max)
let y_scale = d3
.scaleLinear()
.domain([0, max])
.range([h - pad, pad]);
svg
.selectAll("rect")
.data(countries)
.enter()
.append("rect")
.attr("x", (entry) => x_scale(entry.pays))
.attr("y", (entry) => y_scale(entry[NormeSelectionne]))
.attr("width", x_scale.bandwidth())
.attr("height", (entry) => h - y_scale(entry[NormeSelectionne]) - pad)
.attr("fill", "steelblue")
.on("pointerenter", function (event, entry) {
d3.select(this).attr("stroke", "black").attr("stroke-width", 2).raise();
let abbr = entry.ISO3;
let value = entry[NormeSelectionne];
tippy(this, {
theme: "light-border",
allowHTML: true,
content: `<span style="font-weight: bold">${entry.pays}</span><br> ${value} certificates for ${NormeSelectionne}`
});
})
.on("pointerleave", function () {
d3.select(this).attr("stroke", null).attr("stroke-width", null);
tippy.hideAll();
});
svg
.append("g")
.style("font-size", "8px")
.attr("transform", `translate(0,${h - pad})`)
.call(d3.axisBottom(x_scale).tickSize(0).tickFormat((d) => country_name.get(d).ISO3));
svg
.append("g")
.style("font-size", "8px")
.attr("transform", `translate(${pad}, 0)`)
.call(d3.axisLeft(y_scale).ticks(5).tickSizeOuter(0));
div
.append("div")
.style("position", "absolute")
.style("right", "10px")
.style("bottom", "15px")
.style("font-size", "60%")
.text("Source: ISO Survey");
return div.node();
}