Skip to content

Instantly share code, notes, and snippets.

@akulmehta
Last active November 26, 2019 01:52
Show Gist options
  • Save akulmehta/4b29fb357ea7f02a1b47b611e03a5468 to your computer and use it in GitHub Desktop.
Save akulmehta/4b29fb357ea7f02a1b47b611e03a5468 to your computer and use it in GitHub Desktop.
Box plot lines need class to show up
license: mit
borough q1 median q3 IQR min max
Manhattan 95 150 220 125 10 407
Brooklyn 60 90 150 90 10 285
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<div id="my_dataviz"></div>
<script>
var margin = {
top: 10,
right: 30,
bottom: 30,
left: 40
},
width = 900 - margin.left - margin.right,
height = 400 - margin.top - margin.bottom;
var svgBox = d3.select("#my_dataviz")
.append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform",
"translate(" + margin.left + "," + margin.top + ")");
var yScale = d3.scaleLinear()
.range([height, 0]);
var xScale = d3.scaleBand()
.rangeRound([0, width])
.paddingInner(0.05)
.align(0.1);
var center = 200
var width = 100
d3.csv("boxPlotData.csv", function(dataset) {
dataset.forEach((f) => {
f.min = +f.min;
f.max = +f.max;
f.q3 = +f.q3;
f.q1 = +f.q1;
f.median = +f.median;
f.IQR = +f.IQR;
})
var max = d3.max(dataset, function(d) {
return +d.max;
});
yScale.domain([0, max])
xScale.domain(dataset.map(function(d) {
return d.borough;
}));
svgBox.append("g").call(d3.axisLeft(yScale));
svgBox.append("g").attr("transform", "translate(0," + height + ")").call(d3.axisBottom(xScale));
svgBox.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", d => xScale(d.borough) + width / 3.5)
.attr("y", d => yScale(+d.q3))
.attr("height", d => (yScale(+d.q1) - yScale(+d.q3)))
.attr("width", width)
.attr("stroke", "black")
.style("fill", "#69b3a2");
svgBox.selectAll(".line")
.data(dataset)
.enter()
.append("line")
.attr("class", "line")
.attr("x1", d => xScale(d.borough) + width / 3.5)
.attr("x2", d => xScale(d.borough) + width / 3.5)
.attr("y1", d => yScale(+d.min))
.attr("y2", d => yScale(+d.max))
.attr("stroke", "black");
});
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment