index.html
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
margin: 0;
}
path {
stroke: #e2e3e3;
fill-opacity: .8;
}
</style>
<body>
<div id="chart"></div>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
document.ready(renderStream)
function renderStream(){
var width = $(document).width(),
height = $(document).height();
var csv = Block.vars.csv.data;
var streamHeightHeader = Block.vars.csv.columnRoleMap.streamHeight[0];
var seriesHeader = Block.vars.csv.columnRoleMap.series[0];
var uniqueSeries = findUniqueSeries(csv);
var m = uniqueSeries.length;
var data = transformCSV(csv, uniqueSeries);
var n = data[0].length;
var x = d3.scale.linear()
.domain([0, n - 1])
.range([0, width]);
var y = d3.scale.ordinal()
.domain(d3.range(m))
.rangePoints([0, height], 1);
var z = d3.scale.linear()
.domain(d3.extent(csv, function(d){ return d[streamHeightHeader]; }))
.range([0, height / (2*m)]);
var color = d3.scale.ordinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56"]);
var area = d3.svg.area()
.interpolate("basis")
.x(function(d, i) { return x(i); })
.y0(function(d) { return -z(d); })
.y1(function(d) { return z(d); });
var svg = d3.select("#chart").append("svg")
.attr("width", width)
.attr("height", height);
svg.selectAll("path")
.data(data)
.enter().append("path")
.attr("transform", function(d, i) { return "translate(0," + y(i) + ")"; })
.style("fill", function(d, i) { return color(i); })
.attr("d", area);
function findUniqueSeries(csv){
var uniqueSeries = d3.set(csv.map(function(row){
return row[seriesHeader];
})).values();
return uniqueSeries;
}
function transformCSV(csv, uniqueSeries){
var dataObject = {};
uniqueSeries.forEach(function(series){
dataObject[series] = [];
})
csv.forEach(function(row){
dataObject[row[seriesHeader]].push(row[streamHeightHeader]);
})
return d3.values(dataObject);
}
}
</script>