forked from nivas8292's block: Zoom and Brush in d3
forked from ptvans's block: Zoom and Brush in d3
license: mit |
forked from nivas8292's block: Zoom and Brush in d3
forked from ptvans's block: Zoom and Brush in d3
date | price | |
---|---|---|
Jan 2000 | 1394.46 | |
Feb 2000 | 1366.42 | |
Mar 2000 | 1498.58 | |
Apr 2000 | 1452.43 | |
May 2000 | 1420.6 | |
Jun 2000 | 1454.6 | |
Jul 2000 | 1430.83 | |
Aug 2000 | 1517.68 | |
Sep 2000 | 1436.51 | |
Oct 2000 | 1429.4 | |
Nov 2000 | 1314.95 | |
Dec 2000 | 1320.28 | |
Jan 2001 | 1366.01 | |
Feb 2001 | 1239.94 | |
Mar 2001 | 1160.33 | |
Apr 2001 | 1249.46 | |
May 2001 | 1255.82 | |
Jun 2001 | 1224.38 | |
Jul 2001 | 1211.23 | |
Aug 2001 | 1133.58 | |
Sep 2001 | 1040.94 | |
Oct 2001 | 1059.78 | |
Nov 2001 | 1139.45 | |
Dec 2001 | 1148.08 | |
Jan 2002 | 1130.2 | |
Feb 2002 | 1106.73 | |
Mar 2002 | 1147.39 | |
Apr 2002 | 1076.92 | |
May 2002 | 1067.14 | |
Jun 2002 | 989.82 | |
Jul 2002 | 911.62 | |
Aug 2002 | 916.07 | |
Sep 2002 | 815.28 | |
Oct 2002 | 885.76 | |
Nov 2002 | 936.31 | |
Dec 2002 | 879.82 | |
Jan 2003 | 855.7 | |
Feb 2003 | 841.15 | |
Mar 2003 | 848.18 | |
Apr 2003 | 916.92 | |
May 2003 | 963.59 | |
Jun 2003 | 974.5 | |
Jul 2003 | 990.31 | |
Aug 2003 | 1008.01 | |
Sep 2003 | 995.97 | |
Oct 2003 | 1050.71 | |
Nov 2003 | 1058.2 | |
Dec 2003 | 1111.92 | |
Jan 2004 | 1131.13 | |
Feb 2004 | 1144.94 | |
Mar 2004 | 1126.21 | |
Apr 2004 | 1107.3 | |
May 2004 | 1120.68 | |
Jun 2004 | 1140.84 | |
Jul 2004 | 1101.72 | |
Aug 2004 | 1104.24 | |
Sep 2004 | 1114.58 | |
Oct 2004 | 1130.2 | |
Nov 2004 | 1173.82 | |
Dec 2004 | 1211.92 | |
Jan 2005 | 1181.27 | |
Feb 2005 | 1203.6 | |
Mar 2005 | 1180.59 | |
Apr 2005 | 1156.85 | |
May 2005 | 1191.5 | |
Jun 2005 | 1191.33 | |
Jul 2005 | 1234.18 | |
Aug 2005 | 1220.33 | |
Sep 2005 | 1228.81 | |
Oct 2005 | 1207.01 | |
Nov 2005 | 1249.48 | |
Dec 2005 | 1248.29 | |
Jan 2006 | 1280.08 | |
Feb 2006 | 1280.66 | |
Mar 2006 | 1294.87 | |
Apr 2006 | 1310.61 | |
May 2006 | 1270.09 | |
Jun 2006 | 1270.2 | |
Jul 2006 | 1276.66 | |
Aug 2006 | 1303.82 | |
Sep 2006 | 1335.85 | |
Oct 2006 | 1377.94 | |
Nov 2006 | 1400.63 | |
Dec 2006 | 1418.3 | |
Jan 2007 | 1438.24 | |
Feb 2007 | 1406.82 | |
Mar 2007 | 1420.86 | |
Apr 2007 | 1482.37 | |
May 2007 | 1530.62 | |
Jun 2007 | 1503.35 | |
Jul 2007 | 1455.27 | |
Aug 2007 | 1473.99 | |
Sep 2007 | 1526.75 | |
Oct 2007 | 1549.38 | |
Nov 2007 | 1481.14 | |
Dec 2007 | 1468.36 | |
Jan 2008 | 1378.55 | |
Feb 2008 | 1330.63 | |
Mar 2008 | 1322.7 | |
Apr 2008 | 1385.59 | |
May 2008 | 1400.38 | |
Jun 2008 | 1280 | |
Jul 2008 | 1267.38 | |
Aug 2008 | 1282.83 | |
Sep 2008 | 1166.36 | |
Oct 2008 | 968.75 | |
Nov 2008 | 896.24 | |
Dec 2008 | 903.25 | |
Jan 2009 | 825.88 | |
Feb 2009 | 735.09 | |
Mar 2009 | 797.87 | |
Apr 2009 | 872.81 | |
May 2009 | 919.14 | |
Jun 2009 | 919.32 | |
Jul 2009 | 987.48 | |
Aug 2009 | 1020.62 | |
Sep 2009 | 1057.08 | |
Oct 2009 | 1036.19 | |
Nov 2009 | 1095.63 | |
Dec 2009 | 1115.1 | |
Jan 2010 | 1073.87 | |
Feb 2010 | 1104.49 | |
Mar 2010 | 1140.45 |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>D3 Level 3</title> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> | |
<style> | |
svg { | |
font: 10px sans-serif; | |
} | |
.area { | |
fill: steelblue; | |
clip-path: url(#clip); | |
} | |
.axis path, | |
.axis line { | |
fill: none; | |
stroke: #000; | |
shape-rendering: crispEdges; | |
} | |
.brush .extent { | |
stroke: #fff; | |
fill-opacity: .125; | |
shape-rendering: crispEdges; | |
} | |
</style> | |
</head> | |
<body> | |
<button id="reset">Reset</button> | |
<br> | |
<script> | |
var W = 960, H = 500; | |
//Setting up Margins | |
var mainMargin = {top: 10, right: 10, left: 70, bottom: 140}; | |
var subMargin = {top: 400, right: 10, bottom: 40, left: 70}; | |
//Widths, Heights | |
var width = W - mainMargin.left - mainMargin.right; | |
var mainHeight = H - mainMargin.top - mainMargin.bottom; | |
var subHeight = H - subMargin.top - subMargin.bottom; | |
//Date Parser | |
var parseDate = d3.time.format("%b %Y").parse; | |
//Main Chart Scales | |
var mainXScale = d3.time.scale().range([0, width]); | |
var mainYScale = d3.scale.linear().range([mainHeight, 0]); | |
//Sub Chart scales | |
var subXScale = d3.time.scale().range([0, width]); | |
var subYScale = d3.scale.linear().range([subHeight, 0]); | |
//Main Chart Axes | |
var mainXAxis = d3.svg.axis().scale(mainXScale).orient('bottom'); | |
var mainYAxis = d3.svg.axis().scale(mainYScale).orient('left'); | |
//Sub Chart Axes | |
var subXAxis = d3.svg.axis().scale(subXScale).orient('bottom'); | |
var subYAxis = d3.svg.axis().scale(subYScale).orient('left').ticks(2); | |
//Area | |
var mainArea = d3.svg.area() | |
.interpolate('monotone') | |
.x(function (d) { | |
return mainXScale(d.date) | |
}) | |
.y0(mainHeight) | |
.y1(function (d) { | |
return mainYScale(d.price) | |
}); | |
var subArea = d3.svg.area() | |
.interpolate('monotone') | |
.x(function (d) { | |
return subXScale(d.date) | |
}) | |
.y0(subHeight) | |
.y1(function (d) { | |
return subYScale(d.price) | |
}); | |
var svg = d3.select('body').append('svg') | |
.attr('width', W) | |
.attr('height', H); | |
svg.append('defs') | |
.append('clipPath') | |
.attr('id', 'clip') | |
.append('rect') | |
.attr('width', width) | |
.attr('height', mainHeight); | |
var main = svg.append('g') | |
.classed('main', true) | |
.attr("transform", "translate(" + mainMargin.left + "," + mainMargin.top + ")"); | |
var sub = svg.append('g') | |
.classed('sub', true) | |
.attr("transform", "translate(" + subMargin.left + "," + subMargin.top + ")"); | |
var brush = d3.svg.brush() | |
.x(subXScale) | |
.on("brush", brushed); | |
d3.csv('data.csv', function (d) { | |
d.date = parseDate(d.date); | |
d.price = +d.price; | |
return d; | |
}, function (err, data) { | |
mainXScale.domain(d3.extent(data, function (d) { | |
return d.date | |
})); | |
mainYScale.domain([0, d3.max(data, function (d) { | |
return d.price | |
})]); | |
subXScale.domain(mainXScale.domain()); | |
subYScale.domain(mainYScale.domain()); | |
main.append("g") | |
.classed("x axis", true) | |
.attr("transform", "translate(0, " + mainHeight + ")") | |
.call(mainXAxis); | |
main.append("g") | |
.classed("y axis", true) | |
.attr("transform", "translate(0, 0)") | |
.call(mainYAxis); | |
main.append('path') | |
.datum(data) | |
.classed('area', true) | |
.attr('d', mainArea); | |
sub.append("g") | |
.classed("x axis", true) | |
.attr("transform", "translate(0, " + subHeight + ")") | |
.call(subXAxis); | |
sub.append("g") | |
.classed("y axis", true) | |
.attr("transform", "translate(0, 0)") | |
.call(subYAxis); | |
sub.append('path') | |
.datum(data) | |
.classed('area', true) | |
.attr('d', subArea); | |
sub.append("g") | |
.classed("x brush", true) | |
.call(brush) | |
.selectAll("rect") | |
.attr("y", -6) | |
.attr("height", subHeight + 7); | |
d3.select('#reset').on('click', function () { | |
mainXScale.domain(subXScale.domain()); | |
main.select('.area').transition().attr('d', mainArea); | |
main.select('.x.axis').transition().call(mainXAxis); | |
sub.select('rect.extent').transition().attr('width', 0); | |
}) | |
}); | |
function brushed() { | |
mainXScale.domain(brush.empty() ? subXScale.domain() : brush.extent()); | |
main.select('.area').attr('d', mainArea); | |
main.select('.x.axis').call(mainXAxis); | |
} | |
</script> | |
</body> | |
</html> |