Promise.all([
d3.json("https://unpkg.com/world-atlas@1.1.4/world/50m.json"),
d3.csv("https://raw.githubusercontent.com/Manal1Hachhach/visu/main/all_data.csv", function(row) {
return {
continent: row.Continent,
country: row.Country,
countryCode: row["Country Code"],
emissions: +row["Emissions"],
emissionsPerCapita: +row["Emissions Per Capita"],
region: row.Region,
year: +row.Year
}
})
]).then(function([mapData, data]) {
var extremeYears = d3.extent(data, d => d.year);
var currentYear = extremeYears[0];
var currentDataType = d3.select('input[name="data-type"]:checked')
.attr("value");
var geoData = topojson.feature(mapData, mapData.objects.countries).features;
var width = +d3.select(".chart-container")
.node().offsetWidth;
var height = 300;
createMap(width, width * 4 / 5);
createPie(width, height);
createBar(width, height);
drawMap(geoData, data, currentYear, currentDataType);
drawPie(data, currentYear);
drawBar(data, currentDataType, "");
const tooltip = d3.select("body").append("div")
.attr("class", "tooltip2")
.style("position", "absolute")
.text("I'm a circle!");
d3.select("#year")
.property("min", currentYear)
.property("max", extremeYears[1])
.property("value", currentYear)
.on("input", () => {
currentYear = +d3.event.target.value;
drawMap(geoData, data, currentYear, currentDataType);
drawPie(data, currentYear);
highlightBars(currentYear);
});
d3.selectAll('input[name="data-type"]')
.on("change", () => {
var active = d3.select(".active").data()[0];
var country = active ? active.properties.country : "";
currentDataType = d3.event.target.value;
drawMap(geoData, data, currentYear, currentDataType);
drawBar(data, currentDataType, country);
});
d3.selectAll("#map")
.on("mousemove touchmove", updateTooltip);
function updateTooltip() {
var tooltip = d3.select(".tooltip2");
var tgt = d3.select(d3.event.target);
var isCountry = tgt.classed("country");
var isBar = tgt.classed("bar");
var isArc = tgt.classed("arc");
var dataType = d3.select("input:checked")
.property("value");
var units = dataType === "emissions" ? "thousand metric tons" : "metric tons per capita";
var data;
var percentage = "";
if (isCountry) data = tgt.data()[0].properties;
if (isArc) {
data = tgt.data()[0].data;
percentage = `<p>Percentage of total: ${getPercentage(tgt.data()[0])}</p>`;
}
if (isBar) data = tgt.data()[0];
// MISE A JOUR DIV
tooltip
.style("opacity", +(isCountry || isArc || isBar))
.style("left", (d3.event.pageX ) + "px")
.style("top", (d3.event.pageY) + "px")
.html("TEST")
}
})