Skip to content

Commit e876c97

Browse files
committed
Merge pull request #25
2 parents a87f9cb + 48720af commit e876c97

File tree

5 files changed

+61
-41
lines changed

5 files changed

+61
-41
lines changed

scout-ui/src/minicharts/d3fns/few.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var d3 = require('d3');
22
var _ = require('lodash');
33
var tooltipHtml = require('./tooltip.jade');
4+
var shared = require('./shared');
45
var debug = require('debug')('scout-ui:minicharts:few');
56

67
require('d3-tip')(d3);
@@ -25,7 +26,7 @@ module.exports = function(data, g, width, height, options) {
2526
}
2627
return d.tooltip || tooltipHtml({
2728
label: d.label,
28-
value: Math.round(d.value / sumValues * 100)
29+
value: shared.percentFormat(d.value / sumValues)
2930
});
3031
})
3132
.direction('n')

scout-ui/src/minicharts/d3fns/many.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var d3 = require('d3');
22
var _ = require('lodash');
33
var tooltipHtml = require('./tooltip.jade');
4+
var shared = require('./shared');
45
var debug = require('debug')('scout-ui:minicharts:many');
56

67
require('d3-tip')(d3);
@@ -18,13 +19,13 @@ module.exports = function(data, g, width, height, options) {
1819
.rangeBands([0, width], 0.3, 0.0);
1920

2021
var values = _.pluck(data, 'value');
22+
var maxValue = d3.max(values);
23+
var sumValues = d3.sum(values);
2124

2225
var y = d3.scale.linear()
23-
.domain([0, d3.max(values)])
26+
.domain([0, maxValue])
2427
.range([height, 0]);
2528

26-
var sumY = d3.sum(values);
27-
2829
// set up tooltips
2930
var tip = d3.tip()
3031
.attr('class', 'd3-tip')
@@ -34,7 +35,7 @@ module.exports = function(data, g, width, height, options) {
3435
}
3536
return d.tooltip || tooltipHtml({
3637
label: d.label,
37-
value: d.value
38+
value: shared.percentFormat(d.value / sumValues)
3839
});
3940
})
4041
.direction('n')
@@ -46,8 +47,6 @@ module.exports = function(data, g, width, height, options) {
4647

4748
if (options.scale) {
4849
var maxVal = d3.max(y.domain());
49-
var format = d3.format('%.1f');
50-
var legendValues = [format(maxVal), format(maxVal / 2)];
5150

5251
// @todo use a scale and wrap both text and line in g element
5352
var legend = g.append('g')
@@ -60,7 +59,7 @@ module.exports = function(data, g, width, height, options) {
6059
.attr('y', 0)
6160
.attr('dy', '0.3em')
6261
.attr('text-anchor', 'end')
63-
.text(d3.max(y.domain()) + '%');
62+
.text(shared.percentFormat(maxValue / sumValues));
6463

6564
legend.append('text')
6665
.attr('class', 'legend')
@@ -69,7 +68,7 @@ module.exports = function(data, g, width, height, options) {
6968
.attr('y', height / 2)
7069
.attr('dy', '0.3em')
7170
.attr('text-anchor', 'end')
72-
.text(d3.max(y.domain()) / 2 + '%');
71+
.text(shared.percentFormat(maxValue / sumValues / 2));
7372

7473
legend.append('text')
7574
.attr('class', 'legend')

scout-ui/src/minicharts/d3fns/number.js

Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,46 @@ module.exports = function(opts) {
1313
var height = opts.height - margin.top - margin.bottom;
1414
var el = opts.el;
1515

16-
// use the linear scale just to get nice binning values
17-
var x = d3.scale.linear()
18-
.domain(d3.extent(values))
19-
.range([0, width]);
16+
if (opts.data.unique < 20) {
17+
var data = _(values)
18+
.groupBy(function(d) {
19+
return d;
20+
})
21+
.map(function(v, k) {
22+
v.label = k;
23+
v.value = v.length;
24+
return v;
25+
})
26+
.value();
2027

21-
// Generate a histogram using approx. twenty uniformly-spaced bins
22-
var ticks = x.ticks(20);
28+
} else {
29+
// use the linear scale just to get nice binning values
30+
var x = d3.scale.linear()
31+
.domain(d3.extent(values))
32+
.range([0, width]);
2333

24-
var hist = d3.layout.histogram()
25-
.bins(ticks);
34+
// Generate a histogram using approx. twenty uniformly-spaced bins
35+
var ticks = x.ticks(20);
36+
var hist = d3.layout.histogram()
37+
.bins(ticks);
2638

27-
var data = hist(values);
28-
var sumY = d3.sum(_.pluck(data, 'y'));
39+
var data = hist(values);
40+
var sumY = d3.sum(_.pluck(data, 'y'));
2941

30-
_.each(data, function(d, i) {
31-
var label;
32-
if (i === 0) {
33-
label = '< ' + (d.x + d.dx);
34-
} else if (i === data.length - 1) {
35-
label = '&ge; ' + d.x;
36-
} else {
37-
label = d.x + '-' + (d.x + d.dx);
38-
}
39-
// remapping keys to conform with all other types
40-
d.value = d.y;
41-
d.label = label;
42-
d.tooltip = tooltipHtml({
43-
label: label,
44-
value: Math.round(d.y / sumY * 100)
42+
_.each(data, function(d, i) {
43+
var label;
44+
if (i === 0) {
45+
label = '< ' + (d.x + d.dx);
46+
} else if (i === data.length - 1) {
47+
label = '&ge; ' + d.x;
48+
} else {
49+
label = d.x + '-' + (d.x + d.dx);
50+
}
51+
// remapping keys to conform with all other types
52+
d.value = d.y;
53+
d.label = label;
4554
});
46-
});
55+
}
4756

4857
// clear element first
4958
d3.select(el).selectAll('*').remove();
@@ -52,16 +61,23 @@ module.exports = function(opts) {
5261
.append('g')
5362
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
5463

55-
many(data, g, width, height - 10, {
56-
scale: true,
57-
bgbars: false,
58-
labels: {
64+
var labels;
65+
if (opts.data.unique < 20) {
66+
labels = true;
67+
} else {
68+
labels = {
5969
text: function(d, i) {
6070
if (i === 0) return 'min: ' + d3.min(values);
6171
if (i === data.length - 1) return 'max: ' + d3.max(values);
6272
return '';
6373
}
64-
}
74+
};
75+
}
76+
77+
many(data, g, width, height - 10, {
78+
scale: true,
79+
bgbars: false,
80+
labels: labels
6581
});
6682
};
6783

scout-ui/src/minicharts/d3fns/shared.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var d3 = require('d3');
2+
13
module.exports = {
24

35
margin: {
@@ -7,4 +9,6 @@ module.exports = {
79
left: 40
810
},
911

12+
percentFormat: d3.format('%.1f')
13+
1014
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
.tooltip-wrapper
22
.tooltip-label!= label
3-
.tooltip-value #{value}%
3+
.tooltip-value #{value}

0 commit comments

Comments
 (0)