@@ -20,35 +20,37 @@ function transformExpn(x) {
20
20
return - Math . exp ( - x ) ;
21
21
}
22
22
23
- function pow10 ( x ) {
24
- return isFinite ( x ) ? + ( "1e" + x ) : x < 0 ? 0 : x ;
23
+ function pow10 ( x , k ) {
24
+ return isFinite ( x ) ? + ( k + "e" + x ) : x < 0 ? 0 : x ;
25
+ }
26
+
27
+ function exp ( x , k ) {
28
+ return Math . exp ( x ) * k ;
25
29
}
26
30
27
31
function powp ( base ) {
28
32
return base === 10 ? pow10
29
- : base === Math . E ? Math . exp
30
- : function ( x ) { return Math . pow ( base , x ) ; } ;
33
+ : base === Math . E ? exp
34
+ : ( x , k ) => Math . pow ( base , x ) * k ;
31
35
}
32
36
33
37
function logp ( base ) {
34
38
return base === Math . E ? Math . log
35
39
: base === 10 && Math . log10
36
40
|| base === 2 && Math . log2
37
- || ( base = Math . log ( base ) , function ( x ) { return Math . log ( x ) / base ; } ) ;
41
+ || ( base = Math . log ( base ) , ( x ) => Math . log ( x ) / base ) ;
38
42
}
39
43
40
44
function reflect ( f ) {
41
- return function ( x ) {
42
- return - f ( - x ) ;
43
- } ;
45
+ return ( x , k ) => - f ( - x , k ) ;
44
46
}
45
47
46
48
export function loggish ( transform ) {
47
- var scale = transform ( transformLog , transformExp ) ,
48
- domain = scale . domain ,
49
- base = 10 ,
50
- logs ,
51
- pows ;
49
+ const scale = transform ( transformLog , transformExp ) ;
50
+ const domain = scale . domain ;
51
+ let base = 10 ;
52
+ let logs ;
53
+ let pows ;
52
54
53
55
function rescale ( ) {
54
56
logs = logp ( base ) , pows = powp ( base ) ;
@@ -69,81 +71,75 @@ export function loggish(transform) {
69
71
return arguments . length ? ( domain ( _ ) , rescale ( ) ) : domain ( ) ;
70
72
} ;
71
73
72
- scale . ticks = function ( count ) {
73
- var d = domain ( ) ,
74
- u = d [ 0 ] ,
75
- v = d [ d . length - 1 ] ,
76
- r ;
74
+ scale . ticks = count => {
75
+ const d = domain ( ) ;
76
+ let u = d [ 0 ] ;
77
+ let v = d [ d . length - 1 ] ;
78
+ const r = v < u ;
77
79
78
- if ( r = v < u ) i = u , u = v , v = i ;
80
+ if ( r ) ( [ u , v ] = [ v , u ] ) ;
79
81
80
- var i = logs ( u ) ,
81
- j = logs ( v ) ,
82
- p ,
83
- k ,
84
- t ,
85
- n = count == null ? 10 : + count ,
86
- z = [ ] ;
82
+ let i = logs ( u ) ;
83
+ let j = logs ( v ) ;
84
+ let k ;
85
+ let t ;
86
+ const n = count == null ? 10 : + count ;
87
+ let z = [ ] ;
87
88
88
89
if ( ! ( base % 1 ) && j - i < n ) {
89
90
i = Math . floor ( i ) , j = Math . ceil ( j ) ;
90
91
if ( u > 0 ) for ( ; i <= j ; ++ i ) {
91
- for ( k = 1 , p = pows ( i ) ; k < base ; ++ k ) {
92
- t = p * k ;
92
+ for ( k = 1 ; k < base ; ++ k ) {
93
+ t = pows ( i , k ) ;
93
94
if ( t < u ) continue ;
94
95
if ( t > v ) break ;
95
96
z . push ( t ) ;
96
97
}
97
98
} else for ( ; i <= j ; ++ i ) {
98
- for ( k = base - 1 , p = pows ( i ) ; k >= 1 ; -- k ) {
99
- t = p * k ;
99
+ for ( k = base - 1 ; k >= 1 ; -- k ) {
100
+ t = pows ( i , k ) ;
100
101
if ( t < u ) continue ;
101
102
if ( t > v ) break ;
102
103
z . push ( t ) ;
103
104
}
104
105
}
105
106
if ( z . length * 2 < n ) z = ticks ( u , v , n ) ;
106
107
} else {
107
- z = ticks ( i , j , Math . min ( j - i , n ) ) . map ( pows ) ;
108
+ z = ticks ( i , j , Math . min ( j - i , n ) ) . map ( i => pows ( i , 1 ) ) ;
108
109
}
109
110
110
111
return r ? z . reverse ( ) : z ;
111
112
} ;
112
113
113
- scale . tickFormat = function ( count , specifier ) {
114
+ scale . tickFormat = ( count , specifier ) => {
114
115
if ( count == null ) count = 10 ;
115
116
if ( specifier == null ) specifier = base === 10 ? ".0e" : "," ;
116
117
if ( typeof specifier !== "function" ) {
117
118
if ( ! ( base % 1 ) && ( specifier = formatSpecifier ( specifier ) ) . precision == null ) specifier . trim = true ;
118
119
specifier = format ( specifier ) ;
119
120
}
120
121
if ( count === Infinity ) return specifier ;
121
- var k = Math . max ( 1 , base * count / scale . ticks ( ) . length ) ; // TODO fast estimate?
122
- return function ( d ) {
123
- var i = d / pows ( Math . round ( logs ( d ) ) ) ;
122
+ const k = Math . max ( 1 , base * count / scale . ticks ( ) . length ) ; // TODO fast estimate?
123
+ return d => {
124
+ let i = d / pows ( Math . round ( logs ( d ) ) , 1 ) ;
124
125
if ( i * base < base - 0.5 ) i *= base ;
125
126
return i <= k ? specifier ( d ) : "" ;
126
127
} ;
127
128
} ;
128
129
129
- scale . nice = function ( ) {
130
+ scale . nice = ( ) => {
130
131
return domain ( nice ( domain ( ) , {
131
- floor : function ( x ) { return pows ( Math . floor ( logs ( x ) ) ) ; } ,
132
- ceil : function ( x ) { return pows ( Math . ceil ( logs ( x ) ) ) ; }
132
+ floor : x => pows ( Math . floor ( logs ( x ) ) , 1 ) ,
133
+ ceil : x => pows ( Math . ceil ( logs ( x ) ) , 1 )
133
134
} ) ) ;
134
135
} ;
135
136
136
137
return scale ;
137
138
}
138
139
139
140
export default function log ( ) {
140
- var scale = loggish ( transformer ( ) ) . domain ( [ 1 , 10 ] ) ;
141
-
142
- scale . copy = function ( ) {
143
- return copy ( scale , log ( ) ) . base ( scale . base ( ) ) ;
144
- } ;
145
-
141
+ const scale = loggish ( transformer ( ) ) . domain ( [ 1 , 10 ] ) ;
142
+ scale . copy = ( ) => copy ( scale , log ( ) ) . base ( scale . base ( ) ) ;
146
143
initRange . apply ( scale , arguments ) ;
147
-
148
144
return scale ;
149
145
}
0 commit comments