@@ -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 = '≥ ' + 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 ;
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
0 commit comments