Skip to content

Instantly share code, notes, and snippets.

@ericd9799
Last active April 9, 2018 19:42
Show Gist options
  • Select an option

  • Save ericd9799/edd8ec38adf5993fad21ccb529908c23 to your computer and use it in GitHub Desktop.

Select an option

Save ericd9799/edd8ec38adf5993fad21ccb529908c23 to your computer and use it in GitHub Desktop.
CS725 - HW9 - v2
license: mit
date sanitation drinking diarrhoea
2000 18 53 24.4
2001 18 54 23.8
2002 19 56 23.1
2003 20 58 22.1
2004 20 60 21.2
2005 21 61 20.4
2006 21 63 19.5
2007 22 65 18.7
2008 23 67 16.6
2009 23 68 15.2
2010 24 70 14.4
2011 24 72 13.9
2012 25 74 13.4
2013 26 75 12.8
2014 26 77 13
2015 27 79 12.6
date sanitation drinking diarrhoea
2000 36 74 15.2
2001 37 75 14.6
2002 39 76 14.8
2003 40 77 13.7
2004 42 78 13
2005 43 78 13.2
2006 45 79 12.3
2007 46 80 9.5
2008 48 81 9
2009 49 82 7.9
2010 51 82 6.8
2011 52 83 5.3
2012 54 84 5.6
2013 55 85 5.7
2014 57 86 5.1
2015 58 87 4.7
<!DOCTYPE html>
<meta charset="utf-8">
<style> /* set the CSS */
.overlay {
fill: none;
pointer-events: all;
}
.focus circle {
fill: none;
stroke: steelblue;
}
.axis--x path {
<!--display: none;-->
}
.line {
fill: none;
stroke: steelblue;
stroke-width: 1.5px;
}
div.tooltip {
position: absolute;
text-align: center;
width: 60px;
height: 28px;
padding: 2px;
font: 12px sans-serif;
background: lightsteelblue;
border: 0px;
border-radius: 8px;
pointer-events: none;
}
</style>
<body>
<div>
<select id="countrySelection" onchange="updateCountry()">
<option value="bolivia">Bolivia</option>
<option value="brazil">Brazil</option>
<option value="chile">Chile</option>
<option value="colombia">Colombia</option>
<option value="ecuador">Ecuador</option>
<option value="guyana">Guyana</option>
<option value="paraguay">Paraguay</option>
<option value="peru">Peru</option>
<option value="suriname">Suriname</option>
<option value="uruguay">Uruguay</option>
<option value="venezuela">Venezuela</option>
</select>
</div>
<!-- load the d3.js library -->
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
//Select
//var select = d3.select("#countries").property("value");
//Graph
var margin = {top: 20, right: 20, bottom: 30, left: 50},
width = 900 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500)
.append("g")
.attr("transform", "translate(" + margin.left +", "+margin.top+")");
var parseTime = d3.timeParse("%Y"),
bisectDate = d3.bisector(function(d) { return d.date; }).left;
var x = d3.scaleTime().rangeRound([0, width]);
var y = d3.scaleLinear().rangeRound([height, 0]);
var z = d3.scaleOrdinal(d3.schemeCategory10);
var line = d3.line()
//.curve(d3.curveBasis) //makes a smooth line
.x(function(d) {return x(d.date);})
.y(function(d) {return y(d.rates);});
/*
d3.csv("bolivia.csv", function(d){
d.date = parseTime(d.date);
d.sanitation = +d.sanitation;
return d;
}, function(error, data){
if (error) throw error;
x.domain(d3.extent(data, function(d){return d.date;}));
y.domain(d3.extent(data, function(d){return d.sanitation;}));
svg.append("g")
.attr("transform", "translate(0,"+height+")")
.call(d3.axisBottom(x))
.select(".domain");
svg.append("g")
.call(d3.axisLeft(y));
svg.append("path")
.datum(data)
.attr("fill", "none")
.attr("stroke", "steelblue")
.attr("stroke-linejoin", "round")
.attr("stroke-linecap", "round")
.attr("stroke-width", 1.5)
.attr("d", line);
var focus = svg.append("g")
.attr("class", "focus")
.style("display", "none");
focus.append("circle")
.attr("r", 4.5);
focus.append("text")
.attr("x", 9)
.attr("dy", ".35em");
svg.append("rect")
.attr("class", "overlay")
.attr("width", width)
.attr("height", height)
.on("mouseover", function() { focus.style("display", null); })
.on("mouseout", function() { focus.style("display", "none"); })
.on("mousemove", mousemove);
function mousemove() {
var x0 = x.invert(d3.mouse(this)[0]),
i = bisectDate(data, x0, 1),
d0 = data[i - 1],
d1 = data[i],
d = x0 - d0.date > d1.date - x0 ? d1 : d0;
focus.attr("transform", "translate(" + x(d.date) + "," + y(d.sanitation) + ")");
focus.select("text").text(d.sanitation);
}
});
*/
d3.csv("bolivia.csv", type, function(error,data){
if(error) throw error;
var categories = data.columns.slice(1).map(function(id){
return {
id: id,
values: data.map(function(d){
return {date: d.date, rates: d[id]};
})
}
});
x.domain(d3.extent(data, function(d){return d.date;}));
y.domain([
d3.min(categories, function(c){return d3.min(c.values, function(d){return d.rates});}),
d3.max(categories, function(c){return d3.max(c.values, function(d){return d.rates});})
]);
//z.domain(categories.map(function(c){return c.id;}));
svg.append("g")
.attr("class", "x-axis")
.attr("transform", "translate(0,"+height+")")
.call(d3.axisBottom(x));
svg.append("g")
.attr("class", "y-axis")
.call(d3.axisLeft(y))
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("x", -6)
.attr("fill", "#000000")
.text("Percentage of Population(%)");
var category = svg.selectAll(".category")
.data(categories)
.enter().append("g")
.attr("class", "category")
category.append("path")
.attr("class", "line")
.attr("d", function(d){return line(d.values);})
.style("stroke", function(d){return z(d.id);});
category.append("text")
.attr("class", "label")
.datum(function(d){return {id: d.id, value: d.values[d.values.length - 1]};})
.attr("transform", function(d){return "translate("+x(d.value.date)+","+y(d.value.rates)+")";})
.attr("x", 10)
.attr("dy", "0.5em")
.style("font", "10px sans-serif")
.text(function(d){return d.id;});
/*category.selectAll("circle")
.data(function(d){return d.values;})
.enter().append("g")
.append("circle")
.attr("class", "points")
.attr("r", 3)
.attr("cx", function(d){return x(d.date);})
.attr("cy", function(d){return y(d.rates);})
.style("fill", function(d){return z(d.id);});*/
/*
category.selectAll("text")
.data(function(d){return d.values;})
.enter().append("g")
.append("text")
.attr("x", function(d){return x(d.date);})
.attr("y", function(d){return y(d.rates);})
.attr("class", "pointLabels")
.attr("text-anchor", "middle")
.text(function(d){return d.rates});*/
var focus = svg.append("g")
.attr("class", "focus")
.style("display", "none");
focus.append("circle")
.attr("r", 3.5)
focus.append("line")
.attr("class", "y")
.attr("stroke", "black")
//.attr("stroke-dasharray", "3,3")
.style("opacity", 0.5)
.attr("y1", 0)
.attr("y2", height);
focus.append("text")
.attr("x", 9)
.attr("dy", ".35em");
svg.append("rect")
.attr("class", "overlay")
.attr("width", width)
.attr("height", height)
.on("mouseover", function() { focus.style("display", null); })
.on("mouseout", function() { focus.style("display", "none"); })
.on("mousemove", mousemove);
function mousemove() {
var x0 = x.invert(d3.mouse(this)[0]),
i = bisectDate(data, x0, 1, data.length),
d0 = data[i - 1],
d1 = data[i],
d = x0 - d0.date > d1.date - x0 ? d1 : d0,
rate = d3.max([+d.diarrhoea]);
focus.attr("transform", "translate(" + x(d.date) + "," + y(rate) + ")");
//focus.select("text").text(d.sanitation);
}
});
function updateCountry(){
var country = d3.select("#countrySelection").property("value");
console.log(country);
d3.csv(country+".csv",type,function(error,data){
if(error) throw error;
var categories = data.columns.slice(1).map(function(id){
return {
id: id,
values: data.map(function(d){
return {date: d.date, rates: d[id]};
})
}
});
x.domain(d3.extent(data, function(d){return d.date;}));
y.domain([
d3.min(categories, function(c){return d3.min(c.values, function(d){return d.rates});}),
d3.max(categories, function(c){return d3.max(c.values, function(d){return d.rates});})
]);
z.domain(categories.map(function(c){return c.id;}));
var svg = d3.select("body");
//console.log(categories);
svg.selectAll(".line").data(categories).attr("d", function(d){return line(d.values);}).transition().duration(750);
svg.select(".label").attr("transform", function(d){return "translate("+x(d.value.date)+","+y(d.value.rates+30)+")";}).transition().duration(750);
svg.select(".y-axis").call(d3.axisLeft(y)).transition().duration(750);
});
}
function type(d, _, columns){
d.date = parseTime(d.date);
for (var i = 1, n = columns.length, c; i < n; ++i)d[c = columns[i]] = +d[c];
return d;
}
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment