@@ -13,37 +13,61 @@ module.exports = function(opts) {
13
13
var height = opts . height - margin . top - margin . bottom ;
14
14
var el = opts . el ;
15
15
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 ( ) ;
20
27
21
- // Generate a histogram using approx. twenty uniformly-spaced bins
22
- var ticks = x . ticks ( 20 ) ;
28
+ // var sumY = d3.sum(_.pluck(data, 'value'));
29
+ // debug(data, sumY);
30
+ // in a second pass, add tooltips
31
+ // _.each(data, function(d) {
32
+ // d.percent = Math.round(d.value / sumY * 100);
33
+ // d.tooltip = tooltipHtml({
34
+ // label: d.label,
35
+ // value: Math.round(d.percent)
36
+ // });
37
+ // });
23
38
24
- var hist = d3 . layout . histogram ( )
25
- . bins ( ticks ) ;
39
+ } else {
40
+ // use the linear scale just to get nice binning values
41
+ var x = d3 . scale . linear ( )
42
+ . domain ( d3 . extent ( values ) )
43
+ . range ( [ 0 , width ] ) ;
26
44
27
- var data = hist ( values ) ;
28
- var sumY = d3 . sum ( _ . pluck ( data , 'y' ) ) ;
45
+ // Generate a histogram using approx. twenty uniformly-spaced bins
46
+ var ticks = x . ticks ( 20 ) ;
47
+ var hist = d3 . layout . histogram ( )
48
+ . bins ( ticks ) ;
29
49
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 = '≥ ' + 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 )
50
+ var data = hist ( values ) ;
51
+ var sumY = d3 . sum ( _ . pluck ( data , 'y' ) ) ;
52
+
53
+ _ . each ( data , function ( d , i ) {
54
+ var label ;
55
+ if ( i === 0 ) {
56
+ label = '< ' + ( d . x + d . dx ) ;
57
+ } else if ( i === data . length - 1 ) {
58
+ label = '≥ ' + d . x ;
59
+ } else {
60
+ label = d . x + '-' + ( d . x + d . dx ) ;
61
+ }
62
+ // remapping keys to conform with all other types
63
+ d . value = d . y ;
64
+ d . label = label ;
65
+ // d.tooltip = tooltipHtml({
66
+ // label: label,
67
+ // value: Math.round(d.value / sumY * 100)
68
+ // });
45
69
} ) ;
46
- } ) ;
70
+ }
47
71
48
72
// clear element first
49
73
d3 . select ( el ) . selectAll ( '*' ) . remove ( ) ;
@@ -52,16 +76,23 @@ module.exports = function(opts) {
52
76
. append ( 'g' )
53
77
. attr ( 'transform' , 'translate(' + margin . left + ',' + margin . top + ')' ) ;
54
78
55
- many ( data , g , width , height - 10 , {
56
- scale : true ,
57
- bgbars : false ,
58
- labels : {
79
+ var labels ;
80
+ if ( opts . data . unique < 20 ) {
81
+ labels = true ;
82
+ } else {
83
+ labels = {
59
84
text : function ( d , i ) {
60
85
if ( i === 0 ) return 'min: ' + d3 . min ( values ) ;
61
86
if ( i === data . length - 1 ) return 'max: ' + d3 . max ( values ) ;
62
87
return '' ;
63
88
}
64
- }
89
+ } ;
90
+ }
91
+
92
+ many ( data , g , width , height - 10 , {
93
+ scale : true ,
94
+ bgbars : false ,
95
+ labels : labels
65
96
} ) ;
66
97
} ;
67
98
0 commit comments