From 71dc6b7f34dc40c7d0273894984e22cf1b9a4554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 12 Dec 2018 12:09:50 -0500 Subject: [PATCH 1/3] use labelLength to position multicategory ax titles ... replacing (buggy) ax._boundingBox. This fixes ax title placement on multicategory axes with mirror ticks --- src/plots/cartesian/axes.js | 3 ++- test/image/baselines/multicategory-mirror.png | Bin 22944 -> 24870 bytes test/image/mocks/multicategory-mirror.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index 9adbe25fb55..d069811b1de 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -1803,6 +1803,7 @@ axes.drawOne = function(gd, ax, opts) { seq.push(function() { labelLength += getLabelLevelSpan(ax, axId + 'tick2'); + ax._labelLength = labelLength; return drawDividers(gd, ax, { vals: dividerVals, @@ -2608,7 +2609,7 @@ function drawTitle(gd, ax) { var titleStandoff; if(ax.type === 'multicategory') { - titleStandoff = ax._boundingBox[{x: 'height', y: 'width'}[axLetter]]; + titleStandoff = ax._labelLength; } else { var offsetBase = 1.5; titleStandoff = 10 + fontSize * offsetBase + (ax.linewidth ? ax.linewidth - 1 : 0); diff --git a/test/image/baselines/multicategory-mirror.png b/test/image/baselines/multicategory-mirror.png index 88a03453a83cb84e9dbb3ce1346dd2bf38da1f7c..c56a0dcd6bac2ba3b058e941a874ac85e6ec71bc 100644 GIT binary patch literal 24870 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 Xo%sA^(Y>cIDFQVmZN-=8uLk~Ka&k?F literal 22944 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
  • ~<(-|oA6<$2IV&6u=zLJn;8t2# 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 diff --git a/test/image/mocks/multicategory-mirror.json b/test/image/mocks/multicategory-mirror.json index dd11116228e..8142833caa2 100644 --- a/test/image/mocks/multicategory-mirror.json +++ b/test/image/mocks/multicategory-mirror.json @@ -19,6 +19,7 @@ ], "layout": { "xaxis": { + "title": "MULTI-CATEGORY", "ticks": "outside", "showline": true, "mirror": "ticks", From c855e268d9f5d597f15fda260670dc5aa457a071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 12 Dec 2018 12:11:23 -0500 Subject: [PATCH 2/3] fix multicategory axes with inside ticks ... where dividers and ticks go in opposite directions --- src/plots/cartesian/axes.js | 5 +- .../baselines/multicategory-inside-ticks.png | Bin 0 -> 24722 bytes test/image/baselines/multicategory.png | Bin 24900 -> 24898 bytes .../mocks/multicategory-inside-ticks.json | 76 ++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 test/image/baselines/multicategory-inside-ticks.png create mode 100644 test/image/mocks/multicategory-inside-ticks.json diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index d069811b1de..b337d30b11e 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -1781,11 +1781,12 @@ axes.drawOne = function(gd, ax, opts) { if(ax.type === 'multicategory') { var labelLength = 0; var pad = {x: 2, y: 10}[axLetter]; + var sgn = tickSigns[2] * (ax.ticks === 'inside' ? -1 : 1); seq.push(function() { labelLength += getLabelLevelSpan(ax, axId + 'tick') + pad; labelLength += ax._tickAngles[axId + 'tick'] ? ax.tickfont.size * LINE_SPACING : 0; - var secondaryPosition = mainLinePosition + labelLength * tickSigns[2]; + var secondaryPosition = mainLinePosition + labelLength * sgn; var secondaryLabelFns = axes.makeLabelFns(ax, secondaryPosition); return axes.drawLabels(gd, ax, { @@ -1808,7 +1809,7 @@ axes.drawOne = function(gd, ax, opts) { return drawDividers(gd, ax, { vals: dividerVals, layer: mainAxLayer, - path: axes.makeTickPath(ax, mainLinePosition, tickSigns[2], labelLength), + path: axes.makeTickPath(ax, mainLinePosition, sgn, labelLength), transFn: transFn }); }); diff --git a/test/image/baselines/multicategory-inside-ticks.png b/test/image/baselines/multicategory-inside-ticks.png new file mode 100644 index 0000000000000000000000000000000000000000..c01f1b712ef16b61e32f3d0ff677dd2fea9de0eb GIT binary patch literal 24722 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/multicategory.png b/test/image/baselines/multicategory.png index ce31358c8d7a6a9c8fb2d4afc6ec641d5ac3a115..22962eb669f45a99c28e128752e33f17a5d94d5f 100644 GIT binary patch literal 24898 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 Date: Wed, 12 Dec 2018 16:43:11 -0500 Subject: [PATCH 3/3] fix updates out of multicategory axis type --- src/plots/cartesian/axes.js | 6 +-- test/jasmine/tests/cartesian_test.js | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index b337d30b11e..c0a94522ab4 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -1584,10 +1584,8 @@ axes.draw = function(gd, arg, opts) { plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick').remove(); plotinfo.yaxislayer.selectAll('.' + ya._id + 'tick').remove(); - if(xa.type === 'multicategory') { - plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick2').remove(); - plotinfo.xaxislayer.selectAll('.' + xa._id + 'divider').remove(); - } + plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick2').remove(); + plotinfo.xaxislayer.selectAll('.' + xa._id + 'divider').remove(); if(plotinfo.gridlayer) plotinfo.gridlayer.selectAll('path').remove(); if(plotinfo.zerolinelayer) plotinfo.zerolinelayer.selectAll('path').remove(); fullLayout._infolayer.select('.g-' + xa._id + 'title').remove(); diff --git a/test/jasmine/tests/cartesian_test.js b/test/jasmine/tests/cartesian_test.js index e4d9888e2cf..aa816bcb1d8 100644 --- a/test/jasmine/tests/cartesian_test.js +++ b/test/jasmine/tests/cartesian_test.js @@ -849,4 +849,62 @@ describe('subplot creation / deletion:', function() { .catch(failTest) .then(done); }); + + it('clears secondary labels and divider when updating out of axis type multicategory', function(done) { + function _assert(msg, exp) { + var gd3 = d3.select(gd); + expect(gd3.selectAll('.xtick > text').size()) + .toBe(exp.tickCnt, msg + ' # labels'); + expect(gd3.selectAll('.xtick2 > text').size()) + .toBe(exp.tick2Cnt, msg + ' # secondary labels'); + expect(gd3.selectAll('.xdivider').size()) + .toBe(exp.dividerCnt, msg + ' # dividers'); + } + + Plotly.react(gd, [{ + type: 'bar', + x: ['a', 'b', 'c'], + y: [1, 2, 1] + }]) + .then(function() { + _assert('base - category axis', { + tickCnt: 3, + tick2Cnt: 0, + dividerCnt: 0 + }); + }) + .then(function() { + return Plotly.react(gd, [{ + type: 'bar', + x: [ + ['d', 'd', 'e'], + ['a', 'b', 'c'] + ], + y: [1, 2, 3] + }]); + }) + .then(function() { + _assert('multicategory axis', { + tickCnt: 3, + tick2Cnt: 2, + dividerCnt: 3 + }); + }) + .then(function() { + return Plotly.react(gd, [{ + type: 'bar', + x: ['a', 'b', 'c'], + y: [1, 2, 1] + }]); + }) + .then(function() { + _assert('back to category axis', { + tickCnt: 3, + tick2Cnt: 0, + dividerCnt: 0 + }); + }) + .catch(failTest) + .then(done); + }); });