Built with blockbuilder.org
forked from vigneshncc's block: Corona Status - March 2020
license: mit |
Built with blockbuilder.org
forked from vigneshncc's block: Corona Status - March 2020
State | Confirmed | Active | Recovered | Deceased | |
---|---|---|---|---|---|
MAHARASHTRA | 1297 | 1108 | 117 | 72 | |
TAMIL NADU | 738 | 709 | 21 | 8 | |
DELHI | 669 | 639 | 21 | 9 | |
TELANGANA | 453 | 397 | 45 | 11 | |
RAJASTHAN | 430 | 382 | 45 | 3 | |
UTTAR PRADESH | 361 | 326 | 31 | 4 | |
ANDHRA PRADESH | 348 | 339 | 6 | 3 | |
MADHYA PRADESH | 347 | 298 | 25 | 24 | |
KERALA | 345 | 259 | 84 | 2 | |
GUJARAT | 241 | 198 | 126 | 117 | |
KARNATAKA | 191 | 157 | 28 | 16 | |
HARYANA | 168 | 134 | 32 | 2 | |
JAMMU AND KASHMIR | 158 | 149 | 6 | 3 | |
PUNJAB | 117 | 93 | 14 | 110 | |
WEST BENGAL | 103 | 82 | 16 | 5 | |
BIHAR | 51 | 35 | 15 | 1 | |
ODISHA | 44 | 41 | 2 | 1 | |
UTTARAKHAND | 35 | 30 | 5 | 0 | |
ASSAM | 28 | 28 | 0 | 0 | |
HIMACHAL PRADESH | 28 | 24 | 2 | 2 | |
CHANDIGARH | 18 | 11 | 7 | 0 | |
LADAKH | 14 | 4 | 10 | 0 | |
JHARKHAND | 13 | 12 | 0 | 11 | |
ANDAMAN AND NICOBAR ISLANDS | 11 | 11 | 0 | 0 | |
CHHATTISGARH | 11 | 2 | 9 | 0 | |
GOA | 7 | 7 | 0 | 0 | |
PUDUCHERRY | 5 | 4 | 1 | 0 | |
MANIPUR | 2 | 1 | 1 | 0 | |
ARUNACHAL PRADESH | 1 | 1 | 0 | 0 | |
DADRA AND NAGAR HAVELI | 1 | 1 | 0 | 0 | |
MIZORAM | 1 | 1 | 0 | 0 | |
TRIPURA | 1 | 1 | 0 | 0 |
<!DOCTYPE html> | |
<head> | |
<meta charset="utf-8"> | |
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/d3.min.js"></script> | |
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/d3-scale-chromatic.min.js"></script> | |
<style> | |
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; } | |
svg { | |
width: 100%; | |
height: 100%; | |
} | |
</style> | |
</head> | |
<body> | |
<svg></svg> | |
<script> | |
var width = 900; | |
var height = 600; | |
var margin = {top: 10, bottom: 20, left: 40, right: 10}; | |
d3.csv('corona.csv') | |
.then(function(data) { | |
//converting String to numbers. | |
let xAxis = []; | |
let yAxis = []; | |
data.forEach(d =>{ | |
d.Confirmed = ++d.Confirmed; | |
d.Active = ++d.Active; | |
d.Recovered = ++d.Recovered; | |
d.Deceased = ++d.Deceased; | |
}); | |
data.forEach(d =>{ | |
xAxis.push(d.State); | |
yAxis.push(d.Confirmed); | |
}) | |
let series = d3.stack() | |
.keys(data.columns.slice(1)) | |
(data).map(d=> ( | |
d.forEach(v => v.key = d.key),d | |
)); | |
let x = d3.scaleBand() | |
.domain(xAxis) | |
.range([margin.left, width-margin.right]); | |
let y = d3.scaleLinear() | |
.domain([0, d3.max(series, d => d3.max(d, d=>d[1]))]) | |
.rangeRound([height-margin.bottom, margin.top]); | |
let color = d3.scaleOrdinal() | |
.domain(series.map(d => d.key)) | |
.range(d3.schemeSpectral[series.length]) | |
.unknown('#ccc') | |
let formatValue = x => isNaN(x) ? "N/A" : x.toLocaleString("en") | |
const svg = d3.select('svg') | |
svg.append("g") | |
.selectAll("g") | |
.data(series) | |
.join("g") | |
.attr("fill", d=> color(d.key)) | |
.selectAll("rect") | |
.data(d => d) | |
.join("rect") | |
.attr("x", (d, i) => x(d.data.State)) | |
.attr("y", d => y(d[1])) | |
.attr("height", d => y(d[0]) - y(d[1])) | |
.attr("width", x.bandwidth()) | |
.attr("stroke",'white') | |
.append("title") | |
.text(d => `${d.data.State} ${d.key} | |
${formatValue(d.data[d.key])}`); | |
let xScale = g => g.attr('transform', `translate(0,${height-margin.bottom})`) | |
.call(d3.axisBottom(x).tickSizeOuter(0)) | |
.call(g => g.selectAll(".domain").remove()); | |
svg.append("g") | |
.attr("transform", "translate(0," + height + ")") | |
.call(xScale) | |
.selectAll("text") | |
.attr("y", 0) | |
.attr("x", 9) | |
.attr("dy", ".35em") | |
.attr("transform", "rotate(90)") | |
.style("text-anchor", "start") | |
let yScale = g => | |
g.attr('transform', `translate(${margin.left},0)`) | |
.call(d3.axisLeft(y).ticks(null,"s")) | |
.call(g => g.selectAll('.domain').remove()) | |
svg.append("g").call(yScale); | |
}) | |
.catch(function(error){ | |
}) | |
</script> | |
</body> |