@@ -25,40 +25,52 @@ var TOO_MANY_POINTS = require('../scattergl/constants').TOO_MANY_POINTS;
2525function calc ( gd , trace ) {
2626 var stash = { } ;
2727 var opts = { } ;
28- var i , xa , ya ;
28+ var i , xa , ya , dim ;
2929
30- var dimLength = trace . dimensions . length ;
31- var hasTooManyPoints = ( dimLength * trace . _commonLength ) > TOO_MANY_POINTS ;
32- var matrix = opts . data = new Array ( dimLength ) ;
30+ var commonLength = trace . _commonLength ;
31+ var activeLength = trace . _activeLength ;
32+ var matrix = opts . data = [ ] ;
3333
34- for ( i = 0 ; i < dimLength ; i ++ ) {
35- // using xa or ya should make no difference here
36- xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
37- matrix [ i ] = makeCalcdata ( xa , trace , trace . dimensions [ i ] ) ;
34+ for ( i = 0 ; i < activeLength ; i ++ ) {
35+ dim = trace . dimensions [ i ] ;
36+
37+ if ( dim . visible ) {
38+ // using xa or ya should make no difference here
39+ xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
40+ matrix . push ( makeCalcdata ( xa , trace , dim ) ) ;
41+ }
3842 }
3943
4044 calcColorscales ( trace ) ;
4145 Lib . extendFlat ( opts , convertMarkerStyle ( trace ) ) ;
4246
43- for ( i = 0 ; i < dimLength ; i ++ ) {
44- xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
45- ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
46-
47- // Re-use SVG scatter axis expansion routine except
48- // for graph with very large number of points where it
49- // performs poorly.
50- // In big data case, fake Axes.expand outputs with data bounds,
51- // and an average size for array marker.size inputs.
52- var ppad ;
53- if ( hasTooManyPoints ) {
54- ppad = 2 * ( opts . sizeAvg || Math . max ( opts . size , 3 ) ) ;
55- } else {
56- ppad = calcMarkerSize ( trace , trace . _commonLength ) ;
47+ var visibleLength = matrix . length ;
48+ var hasTooManyPoints = ( visibleLength * commonLength ) > TOO_MANY_POINTS ;
49+ var k = 0 ;
50+
51+ for ( i = 0 ; i < activeLength ; i ++ ) {
52+ dim = trace . dimensions [ i ] ;
53+
54+ if ( dim . visible ) {
55+ xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
56+ ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
57+
58+ // Re-use SVG scatter axis expansion routine except
59+ // for graph with very large number of points where it
60+ // performs poorly.
61+ // In big data case, fake Axes.expand outputs with data bounds,
62+ // and an average size for array marker.size inputs.
63+ var ppad ;
64+ if ( hasTooManyPoints ) {
65+ ppad = 2 * ( opts . sizeAvg || Math . max ( opts . size , 3 ) ) ;
66+ } else {
67+ ppad = calcMarkerSize ( trace , commonLength ) ;
68+ }
69+ calcAxisExpansion ( gd , trace , xa , ya , matrix [ k ] , matrix [ k ] , ppad ) ;
70+ k ++ ;
5771 }
58- calcAxisExpansion ( gd , trace , xa , ya , matrix [ i ] , matrix [ i ] , ppad ) ;
5972 }
6073
61-
6274 var scene = stash . _scene = sceneUpdate ( gd , stash ) ;
6375 if ( ! scene . matrix ) scene . matrix = true ;
6476 scene . matrixOptions = opts ;
@@ -167,21 +179,30 @@ function plot(gd, _, cdata) {
167179function plotOne ( gd , cd0 ) {
168180 var fullLayout = gd . _fullLayout ;
169181 var gs = fullLayout . _size ;
170- var scene = cd0 . t . _scene ;
171182 var trace = cd0 . trace ;
183+ var scene = cd0 . t . _scene ;
184+ var opts = scene . matrixOptions ;
185+ var matrix = opts . data ;
172186 var regl = fullLayout . _glcanvas . data ( ) [ 0 ] . regl ;
173187
174- var dimLength = trace . dimensions . length ;
188+ if ( matrix . length === 0 ) return ;
189+
190+ var k = 0 ;
191+ var activeLength = trace . _activeLength ;
192+ var visibleLength = matrix . length ;
175193 var viewOpts = {
176- ranges : new Array ( dimLength ) ,
177- domains : new Array ( dimLength )
194+ ranges : new Array ( visibleLength ) ,
195+ domains : new Array ( visibleLength )
178196 } ;
179197
180- for ( var i = 0 ; i < dimLength ; i ++ ) {
181- var xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
182- var ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
183- viewOpts . ranges [ i ] = [ xa . range [ 0 ] , ya . range [ 0 ] , xa . range [ 1 ] , ya . range [ 1 ] ] ;
184- viewOpts . domains [ i ] = [ xa . domain [ 0 ] , ya . domain [ 0 ] , xa . domain [ 1 ] , ya . domain [ 1 ] ] ;
198+ for ( var i = 0 ; i < activeLength ; i ++ ) {
199+ if ( trace . dimensions [ i ] . visible ) {
200+ var xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
201+ var ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
202+ viewOpts . ranges [ k ] = [ xa . range [ 0 ] , ya . range [ 0 ] , xa . range [ 1 ] , ya . range [ 1 ] ] ;
203+ viewOpts . domains [ k ] = [ xa . domain [ 0 ] , ya . domain [ 0 ] , xa . domain [ 1 ] , ya . domain [ 1 ] ] ;
204+ k ++ ;
205+ }
185206 }
186207
187208 viewOpts . viewport = [ gs . l , gs . b , gs . w + gs . l , gs . h + gs . b ] ;
@@ -191,7 +212,7 @@ function plotOne(gd, cd0) {
191212 }
192213
193214 // FIXME: generate multiple options for single update
194- scene . matrix . update ( scene . matrixOptions ) ;
215+ scene . matrix . update ( opts ) ;
195216 scene . matrix . update ( viewOpts ) ;
196217 scene . matrix . draw ( ) ;
197218}
@@ -214,8 +235,8 @@ function hoverPoints(pointData, xval, yval) {
214235 if ( trace . yaxes [ i ] === ya . _id ) yi = i ;
215236 }
216237
217- var x = dimensions [ xi ] . values ;
218- var y = dimensions [ yi ] . values ;
238+ var x = dimensions [ xi ] . values || [ ] ;
239+ var y = dimensions [ yi ] . values || [ ] ;
219240
220241 var id , ptx , pty , dx , dy , dist , dxy ;
221242 var minDist = maxDistance ;
0 commit comments