source: Dev/branches/rest-dojo-ui/Demo/d3/examples/stream/stack.js @ 312

Last change on this file since 312 was 312, checked in by jkraaijeveld, 13 years ago
File size: 3.0 KB
Line 
1var n = 4, // number of layers
2    m = 64, // number of samples per layer
3    data = d3.layout.stack()(stream_layers(n, m, .1)),
4    color = d3.interpolateRgb("#aad", "#556");
5
6var p = 20,
7    w = 960,
8    h = 500 - .5 - p,
9    mx = m,
10    my = d3.max(data, function(d) {
11      return d3.max(d, function(d) {
12        return d.y0 + d.y;
13      });
14    }),
15    mz = d3.max(data, function(d) {
16      return d3.max(d, function(d) {
17        return d.y;
18      });
19    }),
20    x = function(d) { return d.x * w / mx; },
21    y0 = function(d) { return h - d.y0 * h / my; },
22    y1 = function(d) { return h - (d.y + d.y0) * h / my; },
23    y2 = function(d) { return d.y * h / mz; }; // or `my` to not rescale
24
25var vis = d3.select("#chart")
26  .append("svg:svg")
27    .attr("width", w)
28    .attr("height", h + p);
29
30var layers = vis.selectAll("g.layer")
31    .data(data)
32  .enter().append("svg:g")
33    .style("fill", function(d, i) { return color(i / (n - 1)); })
34    .attr("class", "layer");
35
36var bars = layers.selectAll("g.bar")
37    .data(function(d) { return d; })
38  .enter().append("svg:g")
39    .attr("class", "bar")
40    .attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
41
42bars.append("svg:rect")
43    .attr("width", x({x: .9}))
44    .attr("x", 0)
45    .attr("y", h)
46    .attr("height", 0)
47  .transition()
48    .delay(function(d, i) { return i * 10; })
49    .attr("y", y1)
50    .attr("height", function(d) { return y0(d) - y1(d); });
51
52var labels = vis.selectAll("text.label")
53    .data(data[0])
54  .enter().append("svg:text")
55    .attr("class", "label")
56    .attr("x", x)
57    .attr("y", h + 6)
58    .attr("dx", x({x: .45}))
59    .attr("dy", ".71em")
60    .attr("text-anchor", "middle")
61    .text(function(d, i) { return i; });
62
63vis.append("svg:line")
64    .attr("x1", 0)
65    .attr("x2", w - x({x: .1}))
66    .attr("y1", h)
67    .attr("y2", h);
68
69function transitionGroup() {
70  var group = d3.selectAll("#chart");
71
72  group.select("#group")
73      .attr("class", "first active");
74
75  group.select("#stack")
76      .attr("class", "last");
77
78  group.selectAll("g.layer rect")
79    .transition()
80      .duration(500)
81      .delay(function(d, i) { return (i % m) * 10; })
82      .attr("x", function(d, i) { return x({x: .9 * ~~(i / m) / n}); })
83      .attr("width", x({x: .9 / n}))
84      .each("end", transitionEnd);
85
86  function transitionEnd() {
87    d3.select(this)
88      .transition()
89        .duration(500)
90        .attr("y", function(d) { return h - y2(d); })
91        .attr("height", y2);
92  }
93}
94
95function transitionStack() {
96  var stack = d3.select("#chart");
97
98  stack.select("#group")
99      .attr("class", "first");
100
101  stack.select("#stack")
102      .attr("class", "last active");
103
104  stack.selectAll("g.layer rect")
105    .transition()
106      .duration(500)
107      .delay(function(d, i) { return (i % m) * 10; })
108      .attr("y", y1)
109      .attr("height", function(d) { return y0(d) - y1(d); })
110      .each("end", transitionEnd);
111
112  function transitionEnd() {
113    d3.select(this)
114      .transition()
115        .duration(500)
116        .attr("x", 0)
117        .attr("width", x({x: .9}));
118  }
119}
Note: See TracBrowser for help on using the repository browser.