d3_rails 2.9.1 → 2.9.2.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.DS_Store +0 -0
- data/Gemfile +0 -1
- data/README.md +3 -36
- data/lib/.DS_Store +0 -0
- data/{vendor/assets/javascripts/morris → lib/d3_rails}/.DS_Store +0 -0
- data/lib/d3_rails/version.rb +1 -1
- data/vendor/.DS_Store +0 -0
- data/vendor/assets/.DS_Store +0 -0
- data/vendor/assets/javascripts/.DS_Store +0 -0
- data/vendor/assets/javascripts/d3.v2.js +7 -5
- data/vendor/assets/stylesheets/.DS_Store +0 -0
- metadata +13 -72
- data/vendor/assets/javascripts/chart/box.js +0 -297
- data/vendor/assets/javascripts/chart/bullet.js +0 -237
- data/vendor/assets/javascripts/chart/chart.js +0 -1
- data/vendor/assets/javascripts/chart/horizon.js +0 -203
- data/vendor/assets/javascripts/chart/qq.js +0 -245
- data/vendor/assets/javascripts/d3_chart_module.js +0 -1
- data/vendor/assets/javascripts/morris.js +0 -1
- data/vendor/assets/javascripts/morris/Makefile +0 -10
- data/vendor/assets/javascripts/morris/README.md +0 -87
- data/vendor/assets/javascripts/morris/examples/_template.html +0 -18
- data/vendor/assets/javascripts/morris/examples/days.html +0 -36
- data/vendor/assets/javascripts/morris/examples/decimal.html +0 -31
- data/vendor/assets/javascripts/morris/examples/lib/example.css +0 -13
- data/vendor/assets/javascripts/morris/examples/lib/example.js +0 -4
- data/vendor/assets/javascripts/morris/examples/lib/prettify.css +0 -1
- data/vendor/assets/javascripts/morris/examples/lib/prettify.js +0 -28
- data/vendor/assets/javascripts/morris/examples/months-no-smooth.html +0 -37
- data/vendor/assets/javascripts/morris/examples/negative.html +0 -35
- data/vendor/assets/javascripts/morris/examples/non-date.html +0 -36
- data/vendor/assets/javascripts/morris/examples/quarters.html +0 -53
- data/vendor/assets/javascripts/morris/examples/timestamps.html +0 -37
- data/vendor/assets/javascripts/morris/examples/weeks.html +0 -52
- data/vendor/assets/javascripts/morris/morris.coffee +0 -444
- data/vendor/assets/javascripts/morris/morris.js +0 -493
- data/vendor/assets/javascripts/morris/morris.min.js +0 -1
- data/vendor/assets/javascripts/tesseract.js +0 -1
- data/vendor/assets/javascripts/tesseract/.gitignore +0 -2
- data/vendor/assets/javascripts/tesseract/LICENSE +0 -12
- data/vendor/assets/javascripts/tesseract/Makefile +0 -48
- data/vendor/assets/javascripts/tesseract/README.md +0 -11
- data/vendor/assets/javascripts/tesseract/index.js +0 -1
- data/vendor/assets/javascripts/tesseract/lib/dart/AUTHORS +0 -9
- data/vendor/assets/javascripts/tesseract/lib/dart/LICENSE +0 -25
- data/vendor/assets/javascripts/tesseract/lib/dart/dual_pivot_quicksort.dart +0 -342
- data/vendor/assets/javascripts/tesseract/package.json +0 -11
- data/vendor/assets/javascripts/tesseract/src/array.js +0 -32
- data/vendor/assets/javascripts/tesseract/src/bisect.js +0 -44
- data/vendor/assets/javascripts/tesseract/src/filter.js +0 -19
- data/vendor/assets/javascripts/tesseract/src/heap.js +0 -44
- data/vendor/assets/javascripts/tesseract/src/heapselect.js +0 -36
- data/vendor/assets/javascripts/tesseract/src/identity.js +0 -3
- data/vendor/assets/javascripts/tesseract/src/insertionsort.js +0 -18
- data/vendor/assets/javascripts/tesseract/src/null.js +0 -3
- data/vendor/assets/javascripts/tesseract/src/package.js +0 -14
- data/vendor/assets/javascripts/tesseract/src/permute.js +0 -8
- data/vendor/assets/javascripts/tesseract/src/quicksort.js +0 -282
- data/vendor/assets/javascripts/tesseract/src/reduce.js +0 -19
- data/vendor/assets/javascripts/tesseract/src/tesseract.js +0 -663
- data/vendor/assets/javascripts/tesseract/src/version.js +0 -1
- data/vendor/assets/javascripts/tesseract/src/zero.js +0 -3
- data/vendor/assets/javascripts/tesseract/tesseract.js +0 -1177
- data/vendor/assets/javascripts/tesseract/tesseract.min.js +0 -1
- data/vendor/assets/javascripts/tesseract/test/benchmark.js +0 -177
- data/vendor/assets/javascripts/tesseract/test/bisect-test.js +0 -206
- data/vendor/assets/javascripts/tesseract/test/heap-test.js +0 -44
- data/vendor/assets/javascripts/tesseract/test/permute-test.js +0 -51
- data/vendor/assets/javascripts/tesseract/test/select-test.js +0 -63
- data/vendor/assets/javascripts/tesseract/test/sort-test.js +0 -83
- data/vendor/assets/javascripts/tesseract/test/tesseract-test.js +0 -655
- data/vendor/assets/javascripts/tesseract/test/version-test.js +0 -16
data/.DS_Store
CHANGED
Binary file
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -16,8 +16,8 @@ or you can use it to build dynamic pages (like jQuery).
|
|
16
16
|
|
17
17
|
# D3 Version
|
18
18
|
|
19
|
-
The current release of this gem is using **D3 v=2.9.
|
20
|
-
**Last Updated
|
19
|
+
The current release of this gem is using **D3 v=2.9.2** (though for convenience I have left version 2.7.5 in the gem so you can still include your modules manually since rails will compile your javascripts into one file in the end anyway)
|
20
|
+
**Last Updated 5-18-2012**
|
21
21
|
|
22
22
|
# Included Javascripts
|
23
23
|
**minified js files are not included, since the rails asset pipeline sorta necessitates the compiling (and likely minifying) your js files for production**
|
@@ -33,40 +33,7 @@ The current release of this gem is using **D3 v=2.9.1** (though for convenience
|
|
33
33
|
science.js
|
34
34
|
science.lin.js
|
35
35
|
science.stats.js
|
36
|
-
|
37
|
-
## Additional modules:
|
38
|
-
|
39
|
-
There are a few additional modules/js libraries included for convenience in this gem:
|
40
|
-
|
41
|
-
morris.js
|
42
|
-
tesseract.js
|
43
|
-
d3 charting module
|
44
|
-
|
45
|
-
## D3 charting module
|
46
|
-
|
47
|
-
** D3 charts can be be included in your rails application by including the following line in your javascripts manifest **
|
48
|
-
|
49
|
-
//= require d3_chart_module
|
50
|
-
|
51
|
-
This will include the following javascripts to your application:
|
52
|
-
|
53
|
-
box.js
|
54
|
-
bullet.js
|
55
|
-
chart.js
|
56
|
-
horizon.js
|
57
|
-
qq.js
|
58
|
-
|
59
|
-
## Tesseract
|
60
|
-
|
61
|
-
** Tesseract can be be included in your rails application by including the following line in your javascripts manifest **
|
62
|
-
|
63
|
-
//= require tesseract
|
64
|
-
|
65
|
-
## Morris
|
66
|
-
|
67
|
-
** Morris can also be included in your application with the following additional line of code for your javascripts manifest.
|
68
|
-
|
69
|
-
//= require morris
|
36
|
+
d3.v2.js
|
70
37
|
|
71
38
|
### Installation
|
72
39
|
|
data/lib/.DS_Store
CHANGED
Binary file
|
Binary file
|
data/lib/d3_rails/version.rb
CHANGED
data/vendor/.DS_Store
CHANGED
Binary file
|
data/vendor/assets/.DS_Store
CHANGED
Binary file
|
Binary file
|
@@ -10,7 +10,7 @@ try {
|
|
10
10
|
d3_style_setProperty.call(this, name, value + "", priority);
|
11
11
|
};
|
12
12
|
}
|
13
|
-
d3 = {version: "2.9.
|
13
|
+
d3 = {version: "2.9.2"}; // semver
|
14
14
|
function d3_class(ctor, properties) {
|
15
15
|
try {
|
16
16
|
for (var key in properties) {
|
@@ -661,7 +661,7 @@ d3.format = function(specifier) {
|
|
661
661
|
// Apply the scale, computing it from the value's exponent for si format.
|
662
662
|
if (scale < 0) {
|
663
663
|
var prefix = d3.formatPrefix(value, precision);
|
664
|
-
value
|
664
|
+
value = prefix.scale(value);
|
665
665
|
suffix = prefix.symbol;
|
666
666
|
} else {
|
667
667
|
value *= scale;
|
@@ -730,12 +730,12 @@ d3.formatPrefix = function(value, precision) {
|
|
730
730
|
};
|
731
731
|
|
732
732
|
function d3_formatPrefix(d, i) {
|
733
|
+
var k = Math.pow(10, Math.abs(8 - i) * 3);
|
733
734
|
return {
|
734
|
-
scale:
|
735
|
+
scale: i > 8 ? function(d) { return d / k; } : function(d) { return d * k; },
|
735
736
|
symbol: d
|
736
737
|
};
|
737
738
|
}
|
738
|
-
|
739
739
|
/*
|
740
740
|
* TERMS OF USE - EASING EQUATIONS
|
741
741
|
*
|
@@ -5564,6 +5564,7 @@ d3.layout.pie = function() {
|
|
5564
5564
|
// They are stored in the original data's order.
|
5565
5565
|
var arcs = [];
|
5566
5566
|
index.forEach(function(i) {
|
5567
|
+
var d;
|
5567
5568
|
arcs[i] = {
|
5568
5569
|
data: data[i],
|
5569
5570
|
value: d = values[i],
|
@@ -5987,7 +5988,8 @@ d3.layout.hierarchy = function() {
|
|
5987
5988
|
n,
|
5988
5989
|
c = node.children = [],
|
5989
5990
|
v = 0,
|
5990
|
-
j = depth + 1
|
5991
|
+
j = depth + 1,
|
5992
|
+
d;
|
5991
5993
|
while (++i < n) {
|
5992
5994
|
d = recurse(childs[i], j, nodes);
|
5993
5995
|
d.parent = node;
|
Binary file
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: d3_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.9.
|
5
|
-
prerelease:
|
4
|
+
version: 2.9.2.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Han Kang
|
@@ -12,11 +12,11 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
15
|
+
date: 2012-05-28 00:00:00.000000000Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: railties
|
19
|
-
requirement: &
|
19
|
+
requirement: &70217248387960 !ruby/object:Gem::Requirement
|
20
20
|
none: false
|
21
21
|
requirements:
|
22
22
|
- - ! '>='
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: 3.1.0
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *70217248387960
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: bundler
|
30
|
-
requirement: &
|
30
|
+
requirement: &70217248387460 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
@@ -35,10 +35,10 @@ dependencies:
|
|
35
35
|
version: 1.0.0
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *70217248387460
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: rails
|
41
|
-
requirement: &
|
41
|
+
requirement: &70217248387000 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
version: '3.1'
|
47
47
|
type: :development
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *70217248387000
|
50
50
|
description: Gem installation of javascript framework for data visualization, D3
|
51
51
|
email:
|
52
52
|
- han@logicallsat.com
|
@@ -63,17 +63,13 @@ files:
|
|
63
63
|
- d3_rails.gemspec
|
64
64
|
- lib/.DS_Store
|
65
65
|
- lib/d3_rails.rb
|
66
|
+
- lib/d3_rails/.DS_Store
|
66
67
|
- lib/d3_rails/engine.rb
|
67
68
|
- lib/d3_rails/version.rb
|
68
69
|
- vendor/.DS_Store
|
69
70
|
- vendor/assets/.DS_Store
|
70
71
|
- vendor/assets/javascripts/.DS_Store
|
71
72
|
- vendor/assets/javascripts/LICENSE
|
72
|
-
- vendor/assets/javascripts/chart/box.js
|
73
|
-
- vendor/assets/javascripts/chart/bullet.js
|
74
|
-
- vendor/assets/javascripts/chart/chart.js
|
75
|
-
- vendor/assets/javascripts/chart/horizon.js
|
76
|
-
- vendor/assets/javascripts/chart/qq.js
|
77
73
|
- vendor/assets/javascripts/colorbrewer.js
|
78
74
|
- vendor/assets/javascripts/d3.chart.js
|
79
75
|
- vendor/assets/javascripts/d3.geo.js
|
@@ -82,67 +78,11 @@ files:
|
|
82
78
|
- vendor/assets/javascripts/d3.layout.js
|
83
79
|
- vendor/assets/javascripts/d3.time.js
|
84
80
|
- vendor/assets/javascripts/d3.v2.js
|
85
|
-
- vendor/assets/javascripts/d3_chart_module.js
|
86
81
|
- vendor/assets/javascripts/d3_csv.js
|
87
82
|
- vendor/assets/javascripts/d3_rails.js
|
88
|
-
- vendor/assets/javascripts/morris.js
|
89
|
-
- vendor/assets/javascripts/morris/.DS_Store
|
90
|
-
- vendor/assets/javascripts/morris/Makefile
|
91
|
-
- vendor/assets/javascripts/morris/README.md
|
92
|
-
- vendor/assets/javascripts/morris/examples/_template.html
|
93
|
-
- vendor/assets/javascripts/morris/examples/days.html
|
94
|
-
- vendor/assets/javascripts/morris/examples/decimal.html
|
95
|
-
- vendor/assets/javascripts/morris/examples/lib/example.css
|
96
|
-
- vendor/assets/javascripts/morris/examples/lib/example.js
|
97
|
-
- vendor/assets/javascripts/morris/examples/lib/prettify.css
|
98
|
-
- vendor/assets/javascripts/morris/examples/lib/prettify.js
|
99
|
-
- vendor/assets/javascripts/morris/examples/months-no-smooth.html
|
100
|
-
- vendor/assets/javascripts/morris/examples/negative.html
|
101
|
-
- vendor/assets/javascripts/morris/examples/non-date.html
|
102
|
-
- vendor/assets/javascripts/morris/examples/quarters.html
|
103
|
-
- vendor/assets/javascripts/morris/examples/timestamps.html
|
104
|
-
- vendor/assets/javascripts/morris/examples/weeks.html
|
105
|
-
- vendor/assets/javascripts/morris/morris.coffee
|
106
|
-
- vendor/assets/javascripts/morris/morris.js
|
107
|
-
- vendor/assets/javascripts/morris/morris.min.js
|
108
83
|
- vendor/assets/javascripts/science.js
|
109
84
|
- vendor/assets/javascripts/science.lin.js
|
110
85
|
- vendor/assets/javascripts/science.stats.js
|
111
|
-
- vendor/assets/javascripts/tesseract.js
|
112
|
-
- vendor/assets/javascripts/tesseract/.gitignore
|
113
|
-
- vendor/assets/javascripts/tesseract/LICENSE
|
114
|
-
- vendor/assets/javascripts/tesseract/Makefile
|
115
|
-
- vendor/assets/javascripts/tesseract/README.md
|
116
|
-
- vendor/assets/javascripts/tesseract/index.js
|
117
|
-
- vendor/assets/javascripts/tesseract/lib/dart/AUTHORS
|
118
|
-
- vendor/assets/javascripts/tesseract/lib/dart/LICENSE
|
119
|
-
- vendor/assets/javascripts/tesseract/lib/dart/dual_pivot_quicksort.dart
|
120
|
-
- vendor/assets/javascripts/tesseract/package.json
|
121
|
-
- vendor/assets/javascripts/tesseract/src/array.js
|
122
|
-
- vendor/assets/javascripts/tesseract/src/bisect.js
|
123
|
-
- vendor/assets/javascripts/tesseract/src/filter.js
|
124
|
-
- vendor/assets/javascripts/tesseract/src/heap.js
|
125
|
-
- vendor/assets/javascripts/tesseract/src/heapselect.js
|
126
|
-
- vendor/assets/javascripts/tesseract/src/identity.js
|
127
|
-
- vendor/assets/javascripts/tesseract/src/insertionsort.js
|
128
|
-
- vendor/assets/javascripts/tesseract/src/null.js
|
129
|
-
- vendor/assets/javascripts/tesseract/src/package.js
|
130
|
-
- vendor/assets/javascripts/tesseract/src/permute.js
|
131
|
-
- vendor/assets/javascripts/tesseract/src/quicksort.js
|
132
|
-
- vendor/assets/javascripts/tesseract/src/reduce.js
|
133
|
-
- vendor/assets/javascripts/tesseract/src/tesseract.js
|
134
|
-
- vendor/assets/javascripts/tesseract/src/version.js
|
135
|
-
- vendor/assets/javascripts/tesseract/src/zero.js
|
136
|
-
- vendor/assets/javascripts/tesseract/tesseract.js
|
137
|
-
- vendor/assets/javascripts/tesseract/tesseract.min.js
|
138
|
-
- vendor/assets/javascripts/tesseract/test/benchmark.js
|
139
|
-
- vendor/assets/javascripts/tesseract/test/bisect-test.js
|
140
|
-
- vendor/assets/javascripts/tesseract/test/heap-test.js
|
141
|
-
- vendor/assets/javascripts/tesseract/test/permute-test.js
|
142
|
-
- vendor/assets/javascripts/tesseract/test/select-test.js
|
143
|
-
- vendor/assets/javascripts/tesseract/test/sort-test.js
|
144
|
-
- vendor/assets/javascripts/tesseract/test/tesseract-test.js
|
145
|
-
- vendor/assets/javascripts/tesseract/test/version-test.js
|
146
86
|
- vendor/assets/stylesheets/.DS_Store
|
147
87
|
- vendor/assets/stylesheets/LICENSE
|
148
88
|
- vendor/assets/stylesheets/azimuthal.css
|
@@ -180,9 +120,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
121
|
none: false
|
182
122
|
requirements:
|
183
|
-
- - ! '
|
123
|
+
- - ! '>'
|
184
124
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
125
|
+
version: 1.3.1
|
186
126
|
requirements: []
|
187
127
|
rubyforge_project: d3_rails
|
188
128
|
rubygems_version: 1.8.6
|
@@ -190,3 +130,4 @@ signing_key:
|
|
190
130
|
specification_version: 3
|
191
131
|
summary: D3 automated install for Rails 3.1+
|
192
132
|
test_files: []
|
133
|
+
has_rdoc:
|
@@ -1,297 +0,0 @@
|
|
1
|
-
// Inspired by http://informationandvisualization.de/blog/box-plot
|
2
|
-
d3.chart.box = function() {
|
3
|
-
var width = 1,
|
4
|
-
height = 1,
|
5
|
-
duration = 0,
|
6
|
-
domain = null,
|
7
|
-
value = Number,
|
8
|
-
whiskers = d3_chart_boxWhiskers,
|
9
|
-
quartiles = d3_chart_boxQuartiles,
|
10
|
-
tickFormat = null;
|
11
|
-
|
12
|
-
// For each small multiple…
|
13
|
-
function box(g) {
|
14
|
-
g.each(function(d, i) {
|
15
|
-
d = d.map(value).sort(d3.ascending);
|
16
|
-
var g = d3.select(this),
|
17
|
-
n = d.length,
|
18
|
-
min = d[0],
|
19
|
-
max = d[n - 1];
|
20
|
-
|
21
|
-
// Compute quartiles. Must return exactly 3 elements.
|
22
|
-
var quartileData = d.quartiles = quartiles(d);
|
23
|
-
|
24
|
-
// Compute whiskers. Must return exactly 2 elements, or null.
|
25
|
-
var whiskerIndices = whiskers && whiskers.call(this, d, i),
|
26
|
-
whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; });
|
27
|
-
|
28
|
-
// Compute outliers. If no whiskers are specified, all data are "outliers".
|
29
|
-
// We compute the outliers as indices, so that we can join across transitions!
|
30
|
-
var outlierIndices = whiskerIndices
|
31
|
-
? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
|
32
|
-
: d3.range(n);
|
33
|
-
|
34
|
-
// Compute the new x-scale.
|
35
|
-
var x1 = d3.scale.linear()
|
36
|
-
.domain(domain && domain.call(this, d, i) || [min, max])
|
37
|
-
.range([height, 0]);
|
38
|
-
|
39
|
-
// Retrieve the old x-scale, if this is an update.
|
40
|
-
var x0 = this.__chart__ || d3.scale.linear()
|
41
|
-
.domain([0, Infinity])
|
42
|
-
.range(x1.range());
|
43
|
-
|
44
|
-
// Stash the new scale.
|
45
|
-
this.__chart__ = x1;
|
46
|
-
|
47
|
-
// Note: the box, median, and box tick elements are fixed in number,
|
48
|
-
// so we only have to handle enter and update. In contrast, the outliers
|
49
|
-
// and other elements are variable, so we need to exit them! Variable
|
50
|
-
// elements also fade in and out.
|
51
|
-
|
52
|
-
// Update center line: the vertical line spanning the whiskers.
|
53
|
-
var center = g.selectAll("line.center")
|
54
|
-
.data(whiskerData ? [whiskerData] : []);
|
55
|
-
|
56
|
-
center.enter().insert("svg:line", "rect")
|
57
|
-
.attr("class", "center")
|
58
|
-
.attr("x1", width / 2)
|
59
|
-
.attr("y1", function(d) { return x0(d[0]); })
|
60
|
-
.attr("x2", width / 2)
|
61
|
-
.attr("y2", function(d) { return x0(d[1]); })
|
62
|
-
.style("opacity", 1e-6)
|
63
|
-
.transition()
|
64
|
-
.duration(duration)
|
65
|
-
.style("opacity", 1)
|
66
|
-
.attr("y1", function(d) { return x1(d[0]); })
|
67
|
-
.attr("y2", function(d) { return x1(d[1]); });
|
68
|
-
|
69
|
-
center.transition()
|
70
|
-
.duration(duration)
|
71
|
-
.style("opacity", 1)
|
72
|
-
.attr("y1", function(d) { return x1(d[0]); })
|
73
|
-
.attr("y2", function(d) { return x1(d[1]); });
|
74
|
-
|
75
|
-
center.exit().transition()
|
76
|
-
.duration(duration)
|
77
|
-
.style("opacity", 1e-6)
|
78
|
-
.attr("y1", function(d) { return x1(d[0]); })
|
79
|
-
.attr("y2", function(d) { return x1(d[1]); })
|
80
|
-
.remove();
|
81
|
-
|
82
|
-
// Update innerquartile box.
|
83
|
-
var box = g.selectAll("rect.box")
|
84
|
-
.data([quartileData]);
|
85
|
-
|
86
|
-
box.enter().append("svg:rect")
|
87
|
-
.attr("class", "box")
|
88
|
-
.attr("x", 0)
|
89
|
-
.attr("y", function(d) { return x0(d[2]); })
|
90
|
-
.attr("width", width)
|
91
|
-
.attr("height", function(d) { return x0(d[0]) - x0(d[2]); })
|
92
|
-
.transition()
|
93
|
-
.duration(duration)
|
94
|
-
.attr("y", function(d) { return x1(d[2]); })
|
95
|
-
.attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
|
96
|
-
|
97
|
-
box.transition()
|
98
|
-
.duration(duration)
|
99
|
-
.attr("y", function(d) { return x1(d[2]); })
|
100
|
-
.attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
|
101
|
-
|
102
|
-
// Update median line.
|
103
|
-
var medianLine = g.selectAll("line.median")
|
104
|
-
.data([quartileData[1]]);
|
105
|
-
|
106
|
-
medianLine.enter().append("svg:line")
|
107
|
-
.attr("class", "median")
|
108
|
-
.attr("x1", 0)
|
109
|
-
.attr("y1", x0)
|
110
|
-
.attr("x2", width)
|
111
|
-
.attr("y2", x0)
|
112
|
-
.transition()
|
113
|
-
.duration(duration)
|
114
|
-
.attr("y1", x1)
|
115
|
-
.attr("y2", x1);
|
116
|
-
|
117
|
-
medianLine.transition()
|
118
|
-
.duration(duration)
|
119
|
-
.attr("y1", x1)
|
120
|
-
.attr("y2", x1);
|
121
|
-
|
122
|
-
// Update whiskers.
|
123
|
-
var whisker = g.selectAll("line.whisker")
|
124
|
-
.data(whiskerData || []);
|
125
|
-
|
126
|
-
whisker.enter().insert("svg:line", "circle, text")
|
127
|
-
.attr("class", "whisker")
|
128
|
-
.attr("x1", 0)
|
129
|
-
.attr("y1", x0)
|
130
|
-
.attr("x2", width)
|
131
|
-
.attr("y2", x0)
|
132
|
-
.style("opacity", 1e-6)
|
133
|
-
.transition()
|
134
|
-
.duration(duration)
|
135
|
-
.attr("y1", x1)
|
136
|
-
.attr("y2", x1)
|
137
|
-
.style("opacity", 1);
|
138
|
-
|
139
|
-
whisker.transition()
|
140
|
-
.duration(duration)
|
141
|
-
.attr("y1", x1)
|
142
|
-
.attr("y2", x1)
|
143
|
-
.style("opacity", 1);
|
144
|
-
|
145
|
-
whisker.exit().transition()
|
146
|
-
.duration(duration)
|
147
|
-
.attr("y1", x1)
|
148
|
-
.attr("y2", x1)
|
149
|
-
.style("opacity", 1e-6)
|
150
|
-
.remove();
|
151
|
-
|
152
|
-
// Update outliers.
|
153
|
-
var outlier = g.selectAll("circle.outlier")
|
154
|
-
.data(outlierIndices, Number);
|
155
|
-
|
156
|
-
outlier.enter().insert("svg:circle", "text")
|
157
|
-
.attr("class", "outlier")
|
158
|
-
.attr("r", 5)
|
159
|
-
.attr("cx", width / 2)
|
160
|
-
.attr("cy", function(i) { return x0(d[i]); })
|
161
|
-
.style("opacity", 1e-6)
|
162
|
-
.transition()
|
163
|
-
.duration(duration)
|
164
|
-
.attr("cy", function(i) { return x1(d[i]); })
|
165
|
-
.style("opacity", 1);
|
166
|
-
|
167
|
-
outlier.transition()
|
168
|
-
.duration(duration)
|
169
|
-
.attr("cy", function(i) { return x1(d[i]); })
|
170
|
-
.style("opacity", 1);
|
171
|
-
|
172
|
-
outlier.exit().transition()
|
173
|
-
.duration(duration)
|
174
|
-
.attr("cy", function(i) { return x1(d[i]); })
|
175
|
-
.style("opacity", 1e-6)
|
176
|
-
.remove();
|
177
|
-
|
178
|
-
// Compute the tick format.
|
179
|
-
var format = tickFormat || x1.tickFormat(8);
|
180
|
-
|
181
|
-
// Update box ticks.
|
182
|
-
var boxTick = g.selectAll("text.box")
|
183
|
-
.data(quartileData);
|
184
|
-
|
185
|
-
boxTick.enter().append("svg:text")
|
186
|
-
.attr("class", "box")
|
187
|
-
.attr("dy", ".3em")
|
188
|
-
.attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
|
189
|
-
.attr("x", function(d, i) { return i & 1 ? width : 0 })
|
190
|
-
.attr("y", x0)
|
191
|
-
.attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
|
192
|
-
.text(format)
|
193
|
-
.transition()
|
194
|
-
.duration(duration)
|
195
|
-
.attr("y", x1);
|
196
|
-
|
197
|
-
boxTick.transition()
|
198
|
-
.duration(duration)
|
199
|
-
.text(format)
|
200
|
-
.attr("y", x1);
|
201
|
-
|
202
|
-
// Update whisker ticks. These are handled separately from the box
|
203
|
-
// ticks because they may or may not exist, and we want don't want
|
204
|
-
// to join box ticks pre-transition with whisker ticks post-.
|
205
|
-
var whiskerTick = g.selectAll("text.whisker")
|
206
|
-
.data(whiskerData || []);
|
207
|
-
|
208
|
-
whiskerTick.enter().append("svg:text")
|
209
|
-
.attr("class", "whisker")
|
210
|
-
.attr("dy", ".3em")
|
211
|
-
.attr("dx", 6)
|
212
|
-
.attr("x", width)
|
213
|
-
.attr("y", x0)
|
214
|
-
.text(format)
|
215
|
-
.style("opacity", 1e-6)
|
216
|
-
.transition()
|
217
|
-
.duration(duration)
|
218
|
-
.attr("y", x1)
|
219
|
-
.style("opacity", 1);
|
220
|
-
|
221
|
-
whiskerTick.transition()
|
222
|
-
.duration(duration)
|
223
|
-
.text(format)
|
224
|
-
.attr("y", x1)
|
225
|
-
.style("opacity", 1);
|
226
|
-
|
227
|
-
whiskerTick.exit().transition()
|
228
|
-
.duration(duration)
|
229
|
-
.attr("y", x1)
|
230
|
-
.style("opacity", 1e-6)
|
231
|
-
.remove();
|
232
|
-
});
|
233
|
-
d3.timer.flush();
|
234
|
-
}
|
235
|
-
|
236
|
-
box.width = function(x) {
|
237
|
-
if (!arguments.length) return width;
|
238
|
-
width = x;
|
239
|
-
return box;
|
240
|
-
};
|
241
|
-
|
242
|
-
box.height = function(x) {
|
243
|
-
if (!arguments.length) return height;
|
244
|
-
height = x;
|
245
|
-
return box;
|
246
|
-
};
|
247
|
-
|
248
|
-
box.tickFormat = function(x) {
|
249
|
-
if (!arguments.length) return tickFormat;
|
250
|
-
tickFormat = x;
|
251
|
-
return box;
|
252
|
-
};
|
253
|
-
|
254
|
-
box.duration = function(x) {
|
255
|
-
if (!arguments.length) return duration;
|
256
|
-
duration = x;
|
257
|
-
return box;
|
258
|
-
};
|
259
|
-
|
260
|
-
box.domain = function(x) {
|
261
|
-
if (!arguments.length) return domain;
|
262
|
-
domain = x == null ? x : d3.functor(x);
|
263
|
-
return box;
|
264
|
-
};
|
265
|
-
|
266
|
-
box.value = function(x) {
|
267
|
-
if (!arguments.length) return value;
|
268
|
-
value = x;
|
269
|
-
return box;
|
270
|
-
};
|
271
|
-
|
272
|
-
box.whiskers = function(x) {
|
273
|
-
if (!arguments.length) return whiskers;
|
274
|
-
whiskers = x;
|
275
|
-
return box;
|
276
|
-
};
|
277
|
-
|
278
|
-
box.quartiles = function(x) {
|
279
|
-
if (!arguments.length) return quartiles;
|
280
|
-
quartiles = x;
|
281
|
-
return box;
|
282
|
-
};
|
283
|
-
|
284
|
-
return box;
|
285
|
-
};
|
286
|
-
|
287
|
-
function d3_chart_boxWhiskers(d) {
|
288
|
-
return [0, d.length - 1];
|
289
|
-
}
|
290
|
-
|
291
|
-
function d3_chart_boxQuartiles(d) {
|
292
|
-
return [
|
293
|
-
d3.quantile(d, .25),
|
294
|
-
d3.quantile(d, .5),
|
295
|
-
d3.quantile(d, .75)
|
296
|
-
];
|
297
|
-
}
|