dc
Version:
A multi-dimensional charting library built to work natively with crossfilter and rendered using d3.js
98 lines (83 loc) • 2.33 kB
HTML
<html lang="en">
<head>
<title>dc.js - Resizing Scatter Plot Brushing Example</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/dc.css"/>
<link type="text/css" rel="stylesheet" href="../css/dc-floatleft.css"/>
</head>
<body>
<div class="container">
<div id="test1"></div>
<div id="test2"></div>
<script type="text/javascript" src="../js/promise-polyfill.js"></script>
<script type="text/javascript" src="../js/fetch.umd.js"></script>
<script type="text/javascript" src="../js/d3.js"></script>
<script type="text/javascript" src="../js/crossfilter.js"></script>
<script type="text/javascript" src="../js/dc.js"></script>
<script type="text/javascript">
dc.constants.EVENT_DELAY = 0;
var chart1 = dc.scatterPlot("#test1");
var chart2 = dc.scatterPlot("#test2");
var data = "x,y,z\n" +
"1,1,3\n" +
"5,2,11\n" +
"13,13,13\n"+
"5,3,20\n"+
"12,12,10\n"+
"3,6,8\n"+
"15,2,9\n"+
"8,6,14\n"+
"1,4,9\n"+
"8,8,12\n";
var data = d3.csvParse(data);
data.forEach(function (x) {
x.x = +x.x;
x.y = +x.y;
x.z = +x.z;
});
var ndx = crossfilter(data),
dim1 = ndx.dimension(function (d) {
return [+d.x, +d.y];
}),
dim2 = ndx.dimension(function (d) {
return [+d.y, +d.z];
}),
group1 = dim1.group(),
group2 = dim2.group();
var fudge = 40;
chart1.width(window.innerWidth/2 - fudge)
.height(window.innerHeight - fudge)
.x(d3.scaleLinear().domain([0, 20]))
.yAxisLabel("y")
.xAxisLabel("x")
.clipPadding(10)
.dimension(dim1)
.excludedOpacity(0.5)
.group(group1);
chart2.width(window.innerWidth/2 - fudge)
.height(window.innerHeight - fudge)
.x(d3.scaleLinear().domain([0, 20]))
.yAxisLabel("z")
.xAxisLabel("y")
.clipPadding(10)
.dimension(dim2)
.excludedColor('#ddd')
.group(group2);
dc.renderAll();
// respond to browser resize (not necessary if width/height is static)
window.onresize = function() {
chart1
.width(window.innerWidth/2 - fudge)
.height(window.innerHeight - fudge)
.rescale();
chart2
.width(window.innerWidth/2 - fudge)
.height(window.innerHeight - fudge)
.rescale();
dc.redrawAll();
};
</script>
</div>
</body>
</html>