Built with blockbuilder.org
xxxxxxxxxx
<html>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script> <!-- for color scales -->
<!-- Example based on https://bl.ocks.org/mbostock/3887118 -->
<!-- Tooltip example from https://www.d3noob.org/2013/01/adding-tooltips-to-d3js-graph.html -->
<style>
body { font-family: calibri; }
.axis { font: 14px calibri; }
.label {font: 16px calibri; }
.tooltip {
position: absolute;
width: 150px;
height: 60px;
background: #f2f2f2;
pointer-events: none;
}
</style>
<body>
<h2>Top 5 Deaths in Alaska</h2>
<div><svg id="chart1" width="700" height="250"></svg></div>
<h2>Top 5 Deaths in Florida</h2>
<div><svg id="chart2" width="700" height="250"></svg></div>
<script>
function restructure_data(data){
var result = []
var obj = {}
var allKeys = []
var maxPercent = 0
for(var i=0; i<data.length;i++){
d = data[i]
year = d.Year
if (Object.keys(obj).indexOf(d.Year+'-'+d.State)==-1){
detail={}
detail[d.Cause] = +d.percentage
obj[d.Year+'-'+d.State] = detail
}else{
current = obj[d.Year+'-'+d.State]
current[d.Cause] = +d.percentage
obj[d.Year+'-'+d.State] = current
}
}
console.log(obj)
yearKeys = Object.keys(obj)
results = []
res = {}
for(var i=0; i<yearKeys.length; i++){
o = {}
yearKey = yearKeys[i]
year_state = yearKeys[i]
year = yearKeys[i].split("-")[0]
state = yearKeys[i].split("-")[1]
console.log(state)
o["Year"] = year
details = obj[yearKey]
causeKeys = Object.keys(details)
for(var x=0; x<causeKeys.length; x++){
cause=causeKeys[x]
o[cause] = details[cause]
if (details[cause] > maxPercent){
maxPercent = details[cause]
}
if (allKeys.indexOf(cause) ==-1){
allKeys.push(cause)
}
}
if (Object.keys(res).indexOf(state) == -1){
res[state] = [o]
}else{
res[state].push(o)
}
}
console.log('******')
console.log(res["Florida"])
return [allKeys, res, maxPercent]
}
var z = d3.scaleOrdinal(d3["schemeAccent"])
function build_chart(file_name, id_name){
d3.csv(file_name).then(function(allData){
restructured = restructure_data(allData)
keys = restructured[0]
results = restructured[1]
maxPercent = restructured[2]
vals = JSON.stringify(results)
console.log(vals)
allData = JSON.parse(vals);
for (x in Object.keys(allData)){
state = Object.keys(allData)[x]
data = allData[state]
x = (parseInt(x)+1).toString()
console.log("#chart"+x)
var svg = d3.select('#chart'+x),
margin = { top: 20, right: 80, bottom: 30, left: 40 },
width = +svg.attr("width") - margin.left - margin.right,
height = +svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")")
var x0 = d3.scaleBand()
.rangeRound([0, width])
.paddingInner(0.1);
var x1 = d3.scaleBand()
.padding(0.05);
var y = d3.scaleLinear()
.rangeRound([height, 0]);
x0.domain(data.map(function (d) { return d.Year; }));
x1.domain(keys).rangeRound([0, x0.bandwidth()]);
y.domain([0, maxPercent+1]).nice();
g.append("g")
.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function (d) { return "translate(" + x0(d.Year) + ",0)"; })
.selectAll("rect")
.data(function (d) {return keys.map(function (key) { return { key: key, value: d[key] }; }).sort(function(a, b) { return b.value - a.value; })})
.enter().append("rect")
.attr("x", function (d,i) { return x1(d.key); })
.attr("y", function (d) { return y(d.value); })
.attr("width", x1.bandwidth())
.attr("height", function (d) { return height - y(d.value); })
.attr("fill", function (d) { return z(d.key); });
g.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x0));
g.append("g")
.attr("class", "axis")
.call(d3.axisLeft(y).ticks(null, "s"))
.append("text")
.attr("x", 2)
.attr("y", y(y.ticks().pop()) + 0.5)
.attr("dy", "0.32em")
.attr("fill", "#000")
.attr("font-weight", "bold")
.attr("text-anchor", "start")
.text("Death Percentage");
var legend = g.append("g")
.attr("font-family", "sans-serif")
.attr("font-size", 10)
.attr("text-anchor", "end")
.selectAll("g")
.data(keys.slice().reverse())
.enter().append("g")
.attr("transform", function (d, i) { return "translate(80," + i * 20 + ")"; });
legend.append("rect")
.attr("x", width - 19)
.attr("width", 19)
.attr("height", 19)
.attr("fill", z);
legend.append("text")
.attr("x", width - 24)
.attr("y", 9.5)
.attr("dy", "0.32em")
.text(function (d) { return d; });
}
});
}
build_chart('ALFL.csv', '#chart')
</script>
</body>
</html>
https://d3js.org/d3.v5.min.js
https://d3js.org/d3-scale-chromatic.v1.min.js