@@ -13,37 +13,46 @@ 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
+ } 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 ] ) ;
23
33
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 ) ;
26
38
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' ) ) ;
29
41
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 )
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 = '≥ ' + 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 ;
45
54
} ) ;
46
- } ) ;
55
+ }
47
56
48
57
// clear element first
49
58
d3 . select ( el ) . selectAll ( '*' ) . remove ( ) ;
@@ -52,16 +61,23 @@ module.exports = function(opts) {
52
61
. append ( 'g' )
53
62
. attr ( 'transform' , 'translate(' + margin . left + ',' + margin . top + ')' ) ;
54
63
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 = {
59
69
text : function ( d , i ) {
60
70
if ( i === 0 ) return 'min: ' + d3 . min ( values ) ;
61
71
if ( i === data . length - 1 ) return 'max: ' + d3 . max ( values ) ;
62
72
return '' ;
63
73
}
64
- }
74
+ } ;
75
+ }
76
+
77
+ many ( data , g , width , height - 10 , {
78
+ scale : true ,
79
+ bgbars : false ,
80
+ labels : labels
65
81
} ) ;
66
82
} ;
67
83
0 commit comments