toolkit/javascript/d3/examples/horizon/horizon.js
changeset 47 c0b4a8b5a012
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolkit/javascript/d3/examples/horizon/horizon.js	Thu Apr 10 14:20:23 2014 +0200
@@ -0,0 +1,43 @@
+var w = 960,
+    h = 40;
+
+var chart = d3.chart.horizon()
+    .width(w)
+    .height(h)
+    .bands(5)
+    .mode("offset")
+    .interpolate("basis");
+
+var svg = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+d3.json("unemployment.json", function(data) {
+
+  // Offset so that positive is above-average and negative is below-average.
+  var mean = data.rate.reduce(function(p, v) { return p + v; }, 0) / data.rate.length;
+
+  // Transpose column values to rows.
+  data = data.rate.map(function(rate, i) {
+    return [Date.UTC(data.year[i], data.month[i] - 1), rate - mean];
+  });
+
+  // Render the chart.
+  svg.data([data]).call(chart);
+
+  // Enable mode buttons.
+  d3.selectAll("#mode button")
+      .data(["offset", "mirror"])
+      .on("click", function(m) {
+        svg.call(chart.duration(0).mode(m));
+        d3.selectAll("#mode button")
+            .classed("active", function(d) { return d == m; });
+      });
+
+  // Enable bands buttons.
+  d3.selectAll("#bands button")
+      .data([-1, 1])
+      .on("click", function bands(db) {
+        svg.call(chart.duration(1000).bands(Math.max(1, chart.bands() + db)));
+      });
+});