@@ -15,12 +15,12 @@ var binFunctions = require('../histogram/bin_functions');
15
15
var normFunctions = require ( '../histogram/norm_functions' ) ;
16
16
var doAvg = require ( '../histogram/average' ) ;
17
17
var getBinSpanLabelRound = require ( '../histogram/bin_label_vals' ) ;
18
+ var calcAllAutoBins = require ( '../histogram/calc' ) . calcAllAutoBins ;
18
19
19
20
module . exports = function calc ( gd , trace ) {
20
- var xa = Axes . getFromId ( gd , trace . xaxis || 'x' ) ;
21
- var x = trace . x ? xa . makeCalcdata ( trace , 'x' ) : [ ] ;
22
- var ya = Axes . getFromId ( gd , trace . yaxis || 'y' ) ;
23
- var y = trace . y ? ya . makeCalcdata ( trace , 'y' ) : [ ] ;
21
+ var xa = Axes . getFromId ( gd , trace . xaxis ) ;
22
+ var ya = Axes . getFromId ( gd , trace . yaxis ) ;
23
+
24
24
var xcalendar = trace . xcalendar ;
25
25
var ycalendar = trace . ycalendar ;
26
26
var xr2c = function ( v ) { return xa . r2c ( v , 0 , xcalendar ) ; } ;
@@ -30,24 +30,28 @@ module.exports = function calc(gd, trace) {
30
30
31
31
var i , j , n , m ;
32
32
33
- var serieslen = trace . _length ;
34
- if ( x . length > serieslen ) x . splice ( serieslen , x . length - serieslen ) ;
35
- if ( y . length > serieslen ) y . splice ( serieslen , y . length - serieslen ) ;
36
-
37
33
// calculate the bins
38
- doAutoBin ( trace , 'x' , x , xa , xr2c , xc2r , xcalendar ) ;
39
- doAutoBin ( trace , 'y' , y , ya , yr2c , yc2r , ycalendar ) ;
34
+ var xBinsAndPos = calcAllAutoBins ( gd , trace , xa , 'x' ) ;
35
+ var xBinSpec = xBinsAndPos [ 0 ] ;
36
+ var xPos0 = xBinsAndPos [ 1 ] ;
37
+ var yBinsAndPos = calcAllAutoBins ( gd , trace , ya , 'y' ) ;
38
+ var yBinSpec = yBinsAndPos [ 0 ] ;
39
+ var yPos0 = yBinsAndPos [ 1 ] ;
40
+
41
+ var serieslen = trace . _length ;
42
+ if ( xPos0 . length > serieslen ) xPos0 . splice ( serieslen , xPos0 . length - serieslen ) ;
43
+ if ( yPos0 . length > serieslen ) yPos0 . splice ( serieslen , yPos0 . length - serieslen ) ;
40
44
41
45
// make the empty bin array & scale the map
42
46
var z = [ ] ;
43
47
var onecol = [ ] ;
44
48
var zerocol = [ ] ;
45
- var nonuniformBinsX = typeof trace . xbins . size === 'string' ;
46
- var nonuniformBinsY = typeof trace . ybins . size === 'string' ;
49
+ var nonuniformBinsX = typeof xBinSpec . size === 'string' ;
50
+ var nonuniformBinsY = typeof yBinSpec . size === 'string' ;
47
51
var xEdges = [ ] ;
48
52
var yEdges = [ ] ;
49
- var xbins = nonuniformBinsX ? xEdges : trace . xbins ;
50
- var ybins = nonuniformBinsY ? yEdges : trace . ybins ;
53
+ var xbins = nonuniformBinsX ? xEdges : xBinSpec ;
54
+ var ybins = nonuniformBinsY ? yEdges : yBinSpec ;
51
55
var total = 0 ;
52
56
var counts = [ ] ;
53
57
var inputPoints = [ ] ;
@@ -77,29 +81,28 @@ module.exports = function calc(gd, trace) {
77
81
}
78
82
79
83
// decrease end a little in case of rounding errors
80
- var binSpec = trace . xbins ;
81
- var binStart = xr2c ( binSpec . start ) ;
82
- var binEnd = xr2c ( binSpec . end ) +
83
- ( binStart - Axes . tickIncrement ( binStart , binSpec . size , false , xcalendar ) ) / 1e6 ;
84
+ var xBinSize = xBinSpec . size ;
85
+ var xBinStart = xr2c ( xBinSpec . start ) ;
86
+ var xBinEnd = xr2c ( xBinSpec . end ) +
87
+ ( xBinStart - Axes . tickIncrement ( xBinStart , xBinSize , false , xcalendar ) ) / 1e6 ;
84
88
85
- for ( i = binStart ; i < binEnd ; i = Axes . tickIncrement ( i , binSpec . size , false , xcalendar ) ) {
89
+ for ( i = xBinStart ; i < xBinEnd ; i = Axes . tickIncrement ( i , xBinSize , false , xcalendar ) ) {
86
90
onecol . push ( sizeinit ) ;
87
91
xEdges . push ( i ) ;
88
92
if ( doavg ) zerocol . push ( 0 ) ;
89
93
}
90
94
xEdges . push ( i ) ;
91
95
92
96
var nx = onecol . length ;
93
- var x0c = xr2c ( trace . xbins . start ) ;
94
- var dx = ( i - x0c ) / nx ;
95
- var x0 = xc2r ( x0c + dx / 2 ) ;
97
+ var dx = ( i - xBinStart ) / nx ;
98
+ var x0 = xc2r ( xBinStart + dx / 2 ) ;
96
99
97
- binSpec = trace . ybins ;
98
- binStart = yr2c ( binSpec . start ) ;
99
- binEnd = yr2c ( binSpec . end ) +
100
- ( binStart - Axes . tickIncrement ( binStart , binSpec . size , false , ycalendar ) ) / 1e6 ;
100
+ var yBinSize = yBinSpec . size ;
101
+ var yBinStart = yr2c ( yBinSpec . start ) ;
102
+ var yBinEnd = yr2c ( yBinSpec . end ) +
103
+ ( yBinStart - Axes . tickIncrement ( yBinStart , yBinSize , false , ycalendar ) ) / 1e6 ;
101
104
102
- for ( i = binStart ; i < binEnd ; i = Axes . tickIncrement ( i , binSpec . size , false , ycalendar ) ) {
105
+ for ( i = yBinStart ; i < yBinEnd ; i = Axes . tickIncrement ( i , yBinSize , false , ycalendar ) ) {
103
106
z . push ( onecol . slice ( ) ) ;
104
107
yEdges . push ( i ) ;
105
108
var ipCol = new Array ( nx ) ;
@@ -110,9 +113,8 @@ module.exports = function calc(gd, trace) {
110
113
yEdges . push ( i ) ;
111
114
112
115
var ny = z . length ;
113
- var y0c = yr2c ( trace . ybins . start ) ;
114
- var dy = ( i - y0c ) / ny ;
115
- var y0 = yc2r ( y0c + dy / 2 ) ;
116
+ var dy = ( i - yBinStart ) / ny ;
117
+ var y0 = yc2r ( yBinStart + dy / 2 ) ;
116
118
117
119
if ( densitynorm ) {
118
120
xinc = makeIncrements ( onecol . length , xbins , dx , nonuniformBinsX ) ;
@@ -134,8 +136,8 @@ module.exports = function calc(gd, trace) {
134
136
var yGapLow = Infinity ;
135
137
var yGapHigh = Infinity ;
136
138
for ( i = 0 ; i < serieslen ; i ++ ) {
137
- var xi = x [ i ] ;
138
- var yi = y [ i ] ;
139
+ var xi = xPos0 [ i ] ;
140
+ var yi = yPos0 [ i ] ;
139
141
n = Lib . findBin ( xi , xbins ) ;
140
142
m = Lib . findBin ( yi , ybins ) ;
141
143
if ( n >= 0 && n < nx && m >= 0 && m < ny ) {
@@ -166,11 +168,11 @@ module.exports = function calc(gd, trace) {
166
168
}
167
169
168
170
return {
169
- x : x ,
171
+ x : xPos0 ,
170
172
xRanges : getRanges ( xEdges , uniqueValsPerX && xVals , xGapLow , xGapHigh , xa , xcalendar ) ,
171
173
x0 : x0 ,
172
174
dx : dx ,
173
- y : y ,
175
+ y : yPos0 ,
174
176
yRanges : getRanges ( yEdges , uniqueValsPerY && yVals , yGapLow , yGapHigh , ya , ycalendar ) ,
175
177
y0 : y0 ,
176
178
dy : dy ,
@@ -179,52 +181,6 @@ module.exports = function calc(gd, trace) {
179
181
} ;
180
182
} ;
181
183
182
- function doAutoBin ( trace , axLetter , data , ax , r2c , c2r , calendar ) {
183
- var binAttr = axLetter + 'bins' ;
184
- var binSpec = trace [ binAttr ] ;
185
- if ( ! binSpec ) binSpec = trace [ binAttr ] = { } ;
186
- var inputBinSpec = trace . _input [ binAttr ] || { } ;
187
- var autoBin = trace . _autoBin = { } ;
188
-
189
- // clear out any previously added autobin info
190
- if ( ! inputBinSpec . size ) delete binSpec . size ;
191
- if ( inputBinSpec . start === undefined ) delete binSpec . start ;
192
- if ( inputBinSpec . end === undefined ) delete binSpec . end ;
193
-
194
- var autoSize = ! binSpec . size ;
195
- var autoStart = binSpec . start === undefined ;
196
- var autoEnd = binSpec . end === undefined ;
197
-
198
- if ( autoSize || autoStart || autoEnd ) {
199
- var newBinSpec = Axes . autoBin ( data , ax , trace [ 'nbins' + axLetter ] , '2d' , calendar , binSpec . size ) ;
200
- if ( trace . type === 'histogram2dcontour' ) {
201
- // the "true" 2nd argument reverses the tick direction (which we can't
202
- // just do with a minus sign because of month bins)
203
- if ( autoStart ) {
204
- newBinSpec . start = c2r ( Axes . tickIncrement (
205
- r2c ( newBinSpec . start ) , newBinSpec . size , true , calendar ) ) ;
206
- }
207
- if ( autoEnd ) {
208
- newBinSpec . end = c2r ( Axes . tickIncrement (
209
- r2c ( newBinSpec . end ) , newBinSpec . size , false , calendar ) ) ;
210
- }
211
- }
212
- if ( autoSize ) binSpec . size = autoBin . size = newBinSpec . size ;
213
- if ( autoStart ) binSpec . start = autoBin . start = newBinSpec . start ;
214
- if ( autoEnd ) binSpec . end = autoBin . end = newBinSpec . end ;
215
- }
216
-
217
- // Backward compatibility for one-time autobinning.
218
- // autobin: true is handled in cleanData, but autobin: false
219
- // needs to be here where we have determined the values.
220
- var autoBinAttr = 'autobin' + axLetter ;
221
- if ( trace . _input [ autoBinAttr ] === false ) {
222
- trace . _input [ binAttr ] = Lib . extendFlat ( { } , binSpec ) ;
223
- delete trace . _input [ autoBinAttr ] ;
224
- delete trace [ autoBinAttr ] ;
225
- }
226
- }
227
-
228
184
function makeIncrements ( len , bins , dv , nonuniform ) {
229
185
var out = new Array ( len ) ;
230
186
var i ;
0 commit comments