|  | 
| 6 | 6 | * LICENSE file in the root directory of this source tree. | 
| 7 | 7 | */ | 
| 8 | 8 | 
 | 
| 9 |  | - | 
| 10 | 9 | 'use strict'; | 
| 11 | 10 | 
 | 
| 12 | 11 | var d3 = require('d3'); | 
| @@ -63,7 +62,8 @@ function isValidCategory(v) { | 
| 63 | 62 | module.exports = function setConvert(ax, fullLayout) { | 
| 64 | 63 |     fullLayout = fullLayout || {}; | 
| 65 | 64 | 
 | 
| 66 |  | -    var axLetter = (ax._id || 'x').charAt(0); | 
|  | 65 | +    var axId = (ax._id || 'x'); | 
|  | 66 | +    var axLetter = axId.charAt(0); | 
| 67 | 67 | 
 | 
| 68 | 68 |     function toLog(v, clip) { | 
| 69 | 69 |         if(v > 0) return Math.log(v) / Math.LN10; | 
| @@ -307,10 +307,25 @@ module.exports = function setConvert(ax, fullLayout) { | 
| 307 | 307 |             var traceIndices = ax._traceIndices; | 
| 308 | 308 |             var i, j; | 
| 309 | 309 | 
 | 
|  | 310 | +            var matchGroups = fullLayout._axisMatchGroups; | 
|  | 311 | +            if(matchGroups && matchGroups.length && ax._categories.length === 0) { | 
|  | 312 | +                for(i = 0; i < matchGroups.length; i++) { | 
|  | 313 | +                    var group = matchGroups[i]; | 
|  | 314 | +                    if(group[axId]) { | 
|  | 315 | +                        for(var axId2 in group) { | 
|  | 316 | +                            if(axId2 !== axId) { | 
|  | 317 | +                                var ax2 = fullLayout[axisIds.id2name(axId2)]; | 
|  | 318 | +                                traceIndices = traceIndices.concat(ax2._traceIndices); | 
|  | 319 | +                            } | 
|  | 320 | +                        } | 
|  | 321 | +                    } | 
|  | 322 | +                } | 
|  | 323 | +            } | 
|  | 324 | + | 
| 310 | 325 |             // [ [cnt, {$cat: index}], for 1,2 ] | 
| 311 |  | -            var seen = ax._multicatSeen = [[0, {}], [0, {}]]; | 
|  | 326 | +            var seen = [[0, {}], [0, {}]]; | 
| 312 | 327 |             // [ [arrayIn[0][i], arrayIn[1][i]], for i .. N ] | 
| 313 |  | -            var list = ax._multicatList = []; | 
|  | 328 | +            var list = []; | 
| 314 | 329 | 
 | 
| 315 | 330 |             for(i = 0; i < traceIndices.length; i++) { | 
| 316 | 331 |                 var trace = fullData[traceIndices[i]]; | 
| @@ -558,15 +573,45 @@ module.exports = function setConvert(ax, fullLayout) { | 
| 558 | 573 |         } | 
| 559 | 574 |     }; | 
| 560 | 575 | 
 | 
|  | 576 | +    // should skip if not category nor multicategory | 
| 561 | 577 |     ax.clearCalc = function() { | 
| 562 |  | -        // initialize the category list, if there is one, so we start over | 
| 563 |  | -        // to be filled in later by ax.d2c | 
| 564 |  | -        ax._categories = (ax._initialCategories || []).slice(); | 
| 565 |  | - | 
| 566 |  | -        // Build the lookup map for initialized categories | 
| 567 |  | -        ax._categoriesMap = {}; | 
| 568 |  | -        for(var j = 0; j < ax._categories.length; j++) { | 
| 569 |  | -            ax._categoriesMap[ax._categories[j]] = j; | 
|  | 578 | +        var matchGroups = fullLayout._axisMatchGroups; | 
|  | 579 | + | 
|  | 580 | +        if(matchGroups && matchGroups.length) { | 
|  | 581 | +            for(var i = 0; i < matchGroups.length; i++) { | 
|  | 582 | +                var group = matchGroups[i]; | 
|  | 583 | + | 
|  | 584 | +                if(group[axId]) { | 
|  | 585 | +                    var categories = null; | 
|  | 586 | +                    var categoriesMap = null; | 
|  | 587 | + | 
|  | 588 | +                    for(var axId2 in group) { | 
|  | 589 | +                        var ax2 = fullLayout[axisIds.id2name(axId2)]; | 
|  | 590 | +                        if(ax2._categories) { | 
|  | 591 | +                            categories = ax2._categories; | 
|  | 592 | +                            categoriesMap = ax2._categoriesMap; | 
|  | 593 | +                            break; | 
|  | 594 | +                        } | 
|  | 595 | +                    } | 
|  | 596 | + | 
|  | 597 | +                    if(categories && categoriesMap) { | 
|  | 598 | +                        ax._categories = categories; | 
|  | 599 | +                        ax._categoriesMap = categoriesMap; | 
|  | 600 | +                    } else { | 
|  | 601 | +                        ax._categories = []; | 
|  | 602 | +                        ax._categoriesMap = {}; | 
|  | 603 | +                    } | 
|  | 604 | +                } | 
|  | 605 | +            } | 
|  | 606 | +        } else { | 
|  | 607 | +            ax._categories = []; | 
|  | 608 | +            ax._categoriesMap = {}; | 
|  | 609 | +        } | 
|  | 610 | + | 
|  | 611 | +        if(ax._initialCategories) { | 
|  | 612 | +            for(var j = 0; j < ax._initialCategories.length; j++) { | 
|  | 613 | +                setCategoryIndex(ax._initialCategories[j]); | 
|  | 614 | +            } | 
| 570 | 615 |         } | 
| 571 | 616 |     }; | 
| 572 | 617 | 
 | 
|  | 
0 commit comments