From 6a052c4c989652e55eda715ed0f9d3e51f0a8e7c Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 14 Apr 2021 11:25:19 -0400 Subject: [PATCH 1/5] hide ticks overlapping inside tick labels on all overlaying axes --- src/plots/cartesian/axes.js | 87 ++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index 2829f4609e1..28d52a4ba64 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -3124,48 +3124,63 @@ axes.drawLabels = function(gd, ax, opts) { } // TODO: hide mathjax? }); - if(ax._anchorAxis) { - ax._anchorAxis._visibleLabelMin = visibleLabelMin; - ax._anchorAxis._visibleLabelMax = visibleLabelMax; + for(var subplot in fullLayout._plots) { + var plotinfo = fullLayout._plots[subplot]; + if(ax._id !== plotinfo.xaxis._id && ax._id !== plotinfo.yaxis._id) continue; + var anchorAx = isX ? plotinfo.yaxis : plotinfo.xaxis; + if(anchorAx) { + anchorAx['_visibleLabelMin_' + ax._id] = visibleLabelMin; + anchorAx['_visibleLabelMax_' + ax._id] = visibleLabelMax; + } } }; ax._hideCounterAxisInsideTickLabels = function(partialOpts) { - if(insideTicklabelposition(ax._anchorAxis || {})) { - (partialOpts || [ - ZERO_PATH, - GRID_PATH, - TICK_PATH, - TICK_TEXT - ]).forEach(function(e) { - var isPeriodLabel = - e.K === 'tick' && - e.L === 'text' && - ax.ticklabelmode === 'period'; - - var sel; - if(e.K === ZERO_PATH.K) sel = opts.plotinfo.zerolinelayer.selectAll('.' + ax._id + 'zl'); - else if(e.K === GRID_PATH.K) sel = opts.plotinfo.gridlayer.selectAll('.' + ax._id); - else sel = opts.plotinfo[ax._id.charAt(0) + 'axislayer']; - - sel.each(function() { - var w = d3.select(this); - if(e.L) w = w.selectAll(e.L); - - w.each(function(d) { - var q = ax.l2p( - isPeriodLabel ? getPosX(d) : d.x - ) + ax._offset; - - var t = d3.select(this); - if(q < ax._visibleLabelMax && q > ax._visibleLabelMin) { - t.style('display', 'none'); // hidden - } else if(e.K === 'tick') { - t.style('display', null); // visible - } + var isX = ax._id.charAt(0) === 'x'; + for(var subplot in fullLayout._plots) { + var plotinfo = fullLayout._plots[subplot]; + if(ax._id !== plotinfo.xaxis._id && ax._id !== plotinfo.yaxis._id) continue; + var anchorAx = isX ? plotinfo.yaxis : plotinfo.xaxis; + + if(anchorAx && insideTicklabelposition(anchorAx)) { + (partialOpts || [ + ZERO_PATH, + GRID_PATH, + TICK_PATH, + TICK_TEXT + ]).forEach(function(e) { + var isPeriodLabel = + e.K === 'tick' && + e.L === 'text' && + ax.ticklabelmode === 'period'; + + var sel; + if(e.K === ZERO_PATH.K) sel = opts.plotinfo.zerolinelayer.selectAll('.' + ax._id + 'zl'); + else if(e.K === GRID_PATH.K) sel = opts.plotinfo.gridlayer.selectAll('.' + ax._id); + else sel = opts.plotinfo[ax._id.charAt(0) + 'axislayer']; + + sel.each(function() { + var w = d3.select(this); + if(e.L) w = w.selectAll(e.L); + + w.each(function(d) { + var q = ax.l2p( + isPeriodLabel ? getPosX(d) : d.x + ) + ax._offset; + + var t = d3.select(this); + if( + q < ax['_visibleLabelMax_' + anchorAx._id] && + q > ax['_visibleLabelMin_' + anchorAx._id] + ) { + t.style('display', 'none'); // hidden + } else if(e.K === 'tick') { + t.style('display', null); // visible + } + }); }); }); - }); + } } }; From 6e206349d8dd4bd9f31a4b7e987b6d5323ca3c90 Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 14 Apr 2021 11:57:38 -0400 Subject: [PATCH 2/5] fix refrence from inside async function to anchorAx --- src/plots/cartesian/axes.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index 28d52a4ba64..9137146c277 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -3137,11 +3137,15 @@ axes.drawLabels = function(gd, ax, opts) { ax._hideCounterAxisInsideTickLabels = function(partialOpts) { var isX = ax._id.charAt(0) === 'x'; + + var anchoredAxes = []; for(var subplot in fullLayout._plots) { var plotinfo = fullLayout._plots[subplot]; if(ax._id !== plotinfo.xaxis._id && ax._id !== plotinfo.yaxis._id) continue; - var anchorAx = isX ? plotinfo.yaxis : plotinfo.xaxis; + anchoredAxes.push(isX ? plotinfo.yaxis : plotinfo.xaxis); + } + anchoredAxes.forEach(function(anchorAx) { if(anchorAx && insideTicklabelposition(anchorAx)) { (partialOpts || [ ZERO_PATH, @@ -3181,7 +3185,7 @@ axes.drawLabels = function(gd, ax, opts) { }); }); } - } + }); }; // make sure all labels are correctly positioned at their base angle From 6bb979af3faad84640d4a0dfcbeb8a3cb3f4f473 Mon Sep 17 00:00:00 2001 From: archmoj Date: Thu, 15 Apr 2021 10:34:35 -0400 Subject: [PATCH 3/5] use main plotinfo --- src/plots/cartesian/axes.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index 9137146c277..d32a8ada5ae 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -3158,10 +3158,12 @@ axes.drawLabels = function(gd, ax, opts) { e.L === 'text' && ax.ticklabelmode === 'period'; + var mainPlotinfo = fullLayout._plots[ax._mainSubplot]; + var sel; - if(e.K === ZERO_PATH.K) sel = opts.plotinfo.zerolinelayer.selectAll('.' + ax._id + 'zl'); - else if(e.K === GRID_PATH.K) sel = opts.plotinfo.gridlayer.selectAll('.' + ax._id); - else sel = opts.plotinfo[ax._id.charAt(0) + 'axislayer']; + if(e.K === ZERO_PATH.K) sel = mainPlotinfo.zerolinelayer.selectAll('.' + ax._id + 'zl'); + else if(e.K === GRID_PATH.K) sel = mainPlotinfo.gridlayer.selectAll('.' + ax._id); + else sel = mainPlotinfo[ax._id.charAt(0) + 'axislayer']; sel.each(function() { var w = d3.select(this); From ab00d3515b8144daf15b33266b108658b8f6619c Mon Sep 17 00:00:00 2001 From: archmoj Date: Thu, 15 Apr 2021 10:42:06 -0400 Subject: [PATCH 4/5] only make tick and tick labels visible for the first one --- src/plots/cartesian/axes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index d32a8ada5ae..93875a6c22e 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -3145,7 +3145,7 @@ axes.drawLabels = function(gd, ax, opts) { anchoredAxes.push(isX ? plotinfo.yaxis : plotinfo.xaxis); } - anchoredAxes.forEach(function(anchorAx) { + anchoredAxes.forEach(function(anchorAx, idx) { if(anchorAx && insideTicklabelposition(anchorAx)) { (partialOpts || [ ZERO_PATH, @@ -3180,7 +3180,7 @@ axes.drawLabels = function(gd, ax, opts) { q > ax['_visibleLabelMin_' + anchorAx._id] ) { t.style('display', 'none'); // hidden - } else if(e.K === 'tick') { + } else if(e.K === 'tick' && !idx) { t.style('display', null); // visible } }); From 32381d522e6a650d1b58865c1094289f837e4d32 Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 16 Apr 2021 18:36:34 -0400 Subject: [PATCH 5/5] add image test --- .../baselines/ticklabelposition-overlay2.png | Bin 0 -> 18529 bytes .../mocks/ticklabelposition-overlay2.json | 65 ++++++++++++++++++ test/jasmine/tests/mock_test.js | 2 + 3 files changed, 67 insertions(+) create mode 100644 test/image/baselines/ticklabelposition-overlay2.png create mode 100644 test/image/mocks/ticklabelposition-overlay2.json diff --git a/test/image/baselines/ticklabelposition-overlay2.png b/test/image/baselines/ticklabelposition-overlay2.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1cf07441ebbb31dc391f146ffa6beef59c6dd3 GIT binary patch literal 18529 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 KRV1PB{eJ=Lo+t$X literal 0 HcmV?d00001 diff --git a/test/image/mocks/ticklabelposition-overlay2.json b/test/image/mocks/ticklabelposition-overlay2.json new file mode 100644 index 00000000000..75fc541256c --- /dev/null +++ b/test/image/mocks/ticklabelposition-overlay2.json @@ -0,0 +1,65 @@ +{ + "data": [ + { + "y": [0, 100], + "yaxis": "y" + }, + { + "y": [100, 0], + "yaxis": "y2" + }, + { + "x": [0, 100], + "xaxis": "x2", + "yaxis": "y3" + }, + { + "x": [100, 0], + "xaxis": "x3", + "yaxis": "y3" + } + ], + "layout": { + "width": 300, + "height": 400, + "margin": { + "t": 40, + "b": 40, + "l": 40, + "r": 40 + }, + "plot_bgcolor": "lightblue", + "showlegend": false, + "yaxis": { + "domain" : [0, 0.45], + "anchor": "x", + "ticklabelposition": "inside", + "side": "left" + }, + "yaxis2": { + "overlaying": "y", + "anchor": "x", + "ticklabelposition": "inside", + "side": "right" + }, + "yaxis3": { + "anchor": "x3", + "domain" : [0.55, 1], + "range": [-1.1, 2.1] + }, + "xaxis": { + "range": [-1.1, 2.1] + }, + "xaxis2": { + "overlaying": "x3", + "anchor": "y3", + "ticklabelposition": "inside", + "side": "bottom" + }, + "xaxis3": { + "anchor": "y3", + "ticklabelposition": "inside", + "side": "top" + } + } +} diff --git a/test/jasmine/tests/mock_test.js b/test/jasmine/tests/mock_test.js index d88479f99e6..414f684acef 100644 --- a/test/jasmine/tests/mock_test.js +++ b/test/jasmine/tests/mock_test.js @@ -983,6 +983,7 @@ var list = [ 'ticklabelposition-c', 'ticklabelposition-d', 'ticklabelposition-overlay', + 'ticklabelposition-overlay2', 'tickson_boundaries', 'titles-avoid-labels', 'trace_metatext', @@ -2082,6 +2083,7 @@ figs['ticklabelposition-b'] = require('@mocks/ticklabelposition-b'); figs['ticklabelposition-c'] = require('@mocks/ticklabelposition-c'); figs['ticklabelposition-d'] = require('@mocks/ticklabelposition-d'); figs['ticklabelposition-overlay'] = require('@mocks/ticklabelposition-overlay'); +figs['ticklabelposition-overlay2'] = require('@mocks/ticklabelposition-overlay2'); figs['tickson_boundaries'] = require('@mocks/tickson_boundaries'); // figs['titles-avoid-labels'] = require('@mocks/titles-avoid-labels'); // figs['trace_metatext'] = require('@mocks/trace_metatext');