@@ -27,9 +27,23 @@ var c = require('./constants');
2727var brush = require ( './axisbrush' ) ;
2828var lineLayerMaker = require ( './lines' ) ;
2929
30+ function findExtreme ( fn , values , len ) {
31+ return Lib . aggNums ( fn , null , values , len ) ;
32+ }
33+
34+ function findExtremes ( values , len ) {
35+ return [
36+ findExtreme ( Math . min , values , len ) ,
37+ findExtreme ( Math . max , values , len )
38+ ] ;
39+ }
40+
3041function dimensionExtent ( dimension ) {
31- var lo = dimension . range ? dimension . range [ 0 ] : Lib . aggNums ( Math . min , null , dimension . values , dimension . _length ) ;
32- var hi = dimension . range ? dimension . range [ 1 ] : Lib . aggNums ( Math . max , null , dimension . values , dimension . _length ) ;
42+ var range = dimension . range ;
43+ if ( ! range ) range = findExtremes ( dimension . values , dimension . _length ) ;
44+
45+ var lo = range [ 0 ] ;
46+ var hi = range [ 1 ] ;
3347
3448 if ( isNaN ( lo ) || ! isFinite ( lo ) ) {
3549 lo = 0 ;
@@ -152,11 +166,13 @@ function model(layout, d, i) {
152166 var rangeFont = trace . rangefont ;
153167
154168 var lines = Lib . extendDeepNoArrays ( { } , line , {
155- color : lineColor . map ( d3 . scale . linear ( ) . domain ( dimensionExtent ( {
156- values : lineColor ,
157- range : [ cOpts . min , cOpts . max ] ,
158- _length : trace . _length
159- } ) ) ) ,
169+ color : lineColor . map ( d3 . scale . linear ( ) . domain (
170+ dimensionExtent ( {
171+ values : lineColor ,
172+ range : [ cOpts . min , cOpts . max ] ,
173+ _length : trace . _length
174+ } )
175+ ) ) ,
160176 blockLineCount : c . blockLineCount ,
161177 canvasOverdrag : c . overdrag * c . canvasPixelRatio
162178 } ) ;
@@ -381,28 +397,15 @@ function calcAllTicks(cd) {
381397 for ( var i = 0 ; i < cd . length ; i ++ ) {
382398 for ( var j = 0 ; j < cd [ i ] . length ; j ++ ) {
383399 var trace = cd [ i ] [ j ] . trace ;
384- var len = trace . _length ;
385400 var dimensions = trace . dimensions ;
386401
387402 for ( var k = 0 ; k < dimensions . length ; k ++ ) {
388403 var values = dimensions [ k ] . values ;
389404 var dim = dimensions [ k ] . _ax ;
390405
391406 if ( dim ) {
392- if ( ! dim . range ) {
393- var max = - Infinity ;
394- var min = Infinity ;
395- for ( var q = 0 ; q < len ; q ++ ) {
396- var v = values [ q ] ;
397- if ( isFinite ( v ) ) {
398- if ( max < v ) max = v ;
399- if ( min > v ) min = v ;
400- }
401- }
402- dim . range = [ min , max ] ;
403- }
404-
405- if ( ! dim . dtick ) dim . dtick = 0.01 * Math . abs ( dim . range [ 1 ] - dim . range [ 0 ] ) ;
407+ if ( ! dim . range ) dim . range = findExtremes ( values , trace . _length ) ;
408+ if ( ! dim . dtick ) dim . dtick = 0.01 * ( Math . abs ( dim . range [ 1 ] - dim . range [ 0 ] ) || 1 ) ;
406409
407410 dim . tickformat = dimensions [ k ] . tickformat ;
408411 Axes . calcTicks ( dim ) ;
0 commit comments