| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| |
| <link href="../src/nv.d3.css" rel="stylesheet" type="text/css"> |
| |
| <style> |
| |
| body { |
| overflow-y:scroll; |
| } |
| |
| text { |
| font: 12px sans-serif; |
| } |
| |
| </style> |
| <body> |
| |
| <div id="chart"> |
| <svg></svg> |
| </div> |
| |
| <script src="../lib/d3.v3.js"></script> |
| <script src="../nv.d3.js"></script> |
| <script src="../src/utils.js"></script> |
| <script src="../src/tooltip.js"></script> |
| <script src="../src/models/stackedArea.js"></script> |
| <script> |
| |
| |
| //Format A |
| nv.addGraph({ |
| generate: function() { |
| var n = 10, // number of layers |
| m = 200; // number of samples per layer |
| //color = d3.interpolateRgb("#aad", "#556"); |
| |
| var data = stream_layers(n,m).map(function(data, i) { |
| return { |
| key: 'Stream' + i, |
| values: data |
| }; |
| }); |
| |
| |
| var width = nv.utils.windowSize().width - 20, |
| height = nv.utils.windowSize().height - 20; |
| |
| var chart = nv.models.stackedArea() |
| .width(width) |
| .height(height) |
| //.offset('wiggle') |
| //.order('default') |
| |
| |
| var svg = d3.select('#chart svg') |
| .attr('width', width) |
| .attr('height', height) |
| .datum(data) |
| |
| svg.transition().duration(500).call(chart); |
| |
| return chart; |
| }, |
| callback: function(graph) { |
| |
| |
| |
| graph.dispatch.on('tooltipShow', function(e) { |
| var offsetElement = document.getElementById("chart"), |
| left = e.pos[0] + offsetElement.offsetLeft, |
| top = e.pos[1] + offsetElement.offsetTop, |
| formatterY = d3.format(",.2%"), |
| formatterX = function(d) { |
| return d3.time.format('%x')(new Date(d)) |
| }; |
| |
| var content = '<h3>' + e.series.key + '</h3>' + |
| '<p>' + |
| formatterY(graph.y()(e.point)) + ' at ' + formatterX(graph.x()(e.point)) + |
| '</p>'; |
| |
| nv.tooltip.show([left, top], content); |
| }); |
| |
| graph.dispatch.on('tooltipHide', function(e) { |
| nv.tooltip.cleanup(); |
| }); |
| |
| |
| |
| window.onResize = function() { |
| var width = nv.utils.windowSize().width - 20, |
| height = nv.utils.windowSize().height - 20, |
| margin = graph.margin(); |
| |
| |
| if (width < margin.left + margin.right + 20) |
| width = margin.left + margin.right + 20; |
| |
| if (height < margin.top + margin.bottom + 20) |
| height = margin.top + margin.bottom + 20; |
| |
| |
| graph |
| .width(width) |
| .height(height); |
| |
| d3.select('#chart svg') |
| .attr('width', width) |
| .attr('height', height) |
| .call(graph); |
| |
| } |
| } |
| }); |
| |
| |
| |
| |
| /* Inspired by Lee Byron's test data generator. */ |
| function stream_layers(n, m, o) { |
| if (arguments.length < 3) o = 0; |
| function bump(a) { |
| var x = 1 / (.1 + Math.random()), |
| y = 2 * Math.random() - .5, |
| z = 10 / (.1 + Math.random()); |
| for (var i = 0; i < m; i++) { |
| var w = (i / m - y) * z; |
| a[i] += x * Math.exp(-w * w); |
| } |
| } |
| return d3.range(n).map(function() { |
| var a = [], i; |
| for (i = 0; i < m; i++) a[i] = o + o * Math.random(); |
| for (i = 0; i < 5; i++) bump(a); |
| return a.map(stream_index); |
| }); |
| } |
| |
| /* Another layer generator using gamma distributions. */ |
| function stream_waves(n, m) { |
| return d3.range(n).map(function(i) { |
| return d3.range(m).map(function(j) { |
| var x = 20 * j / m - i / 3; |
| return 2 * x * Math.exp(-.5 * x); |
| }).map(stream_index); |
| }); |
| } |
| |
| function stream_index(d, i) { |
| return {x: i, y: Math.max(0, d)}; |
| } |
| |
| |
| </script> |