source: Dev/branches/jQueryUI/client/d3/examples/stream/stack.js @ 249

Last change on this file since 249 was 249, checked in by hendrikvanantwerpen, 13 years ago

This one's for Subversion, because it's so close...

First widget (stripped down sequencer).
Seperated client and server code in two direcotry trees.

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.