From 66328b431708dc7be543c1bd427d1ebfbe2fae19 Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Wed, 7 May 2025 13:04:57 +0200 Subject: [PATCH 1/4] Add support for `ticklabelposition` "inside"/"outside" for category axes with `tickson` set to "boundaries". "top", "bottom", "left", "right" are ignored if `tickson` is set to "boundaries". --- src/plots/cartesian/axes.js | 13 +- src/plots/cartesian/axis_defaults.js | 8 +- src/plots/cartesian/layout_attributes.js | 11 +- ...-tickson_boundaries_ticklabelposition.json | 150 ++++++++++++++++++ 4 files changed, 169 insertions(+), 13 deletions(-) create mode 100644 test/image/mocks/zz-tickson_boundaries_ticklabelposition.json diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index 84ebe5b3bb1..6f4c48538e1 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -3071,6 +3071,7 @@ function getPosX(d) { // v is a shift perpendicular to the axis function getTickLabelUV(ax) { var ticklabelposition = ax.ticklabelposition || ''; + var tickson = ax.tickson || ''; var has = function(str) { return ticklabelposition.indexOf(str) !== -1; }; @@ -3081,7 +3082,7 @@ function getTickLabelUV(ax) { var isBottom = has('bottom'); var isInside = has('inside'); - var isAligned = isBottom || isLeft || isTop || isRight; + var isAligned = (tickson != 'boundaries') && (isBottom || isLeft || isTop || isRight); // early return if(!isAligned && !isInside) return [0, 0]; @@ -3165,6 +3166,8 @@ axes.makeTickPath = function(ax, shift, sgn, opts) { */ axes.makeLabelFns = function(ax, shift, angle) { var ticklabelposition = ax.ticklabelposition || ''; + var tickson = ax.tickson || ''; + var has = function(str) { return ticklabelposition.indexOf(str) !== -1; }; @@ -3173,12 +3176,12 @@ axes.makeLabelFns = function(ax, shift, angle) { var isLeft = has('left'); var isRight = has('right'); var isBottom = has('bottom'); - var isAligned = isBottom || isLeft || isTop || isRight; + var isAligned = (tickson != 'boundaries') && (isBottom || isLeft || isTop || isRight); var insideTickLabels = has('inside'); var labelsOverTicks = (ticklabelposition === 'inside' && ax.ticks === 'inside') || - (!insideTickLabels && ax.ticks === 'outside' && ax.tickson !== 'boundaries'); + (!insideTickLabels && ax.ticks === 'outside' && tickson !== 'boundaries'); var labelStandoff = 0; var labelShift = 0; @@ -3890,6 +3893,8 @@ axes.drawLabels = function(gd, ax, opts) { } } else { var ticklabelposition = ax.ticklabelposition || ''; + var tickson = ax.tickson ||''; + var has = function(str) { return ticklabelposition.indexOf(str) !== -1; }; @@ -3897,7 +3902,7 @@ axes.drawLabels = function(gd, ax, opts) { var isLeft = has('left'); var isRight = has('right'); var isBottom = has('bottom'); - var isAligned = isBottom || isLeft || isTop || isRight; + var isAligned = (tickson != 'boundaries') && (isBottom || isLeft || isTop || isRight); var pad = !isAligned ? 0 : (ax.tickwidth || 0) + 2 * TEXTPAD; diff --git a/src/plots/cartesian/axis_defaults.js b/src/plots/cartesian/axis_defaults.js index 8c5c75d8832..4531785cd2f 100644 --- a/src/plots/cartesian/axis_defaults.js +++ b/src/plots/cartesian/axis_defaults.js @@ -167,11 +167,11 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, (axType === 'category' || isMultiCategory) && (containerOut.ticks || containerOut.showgrid) ) { - var ticksonDflt; - if(isMultiCategory) ticksonDflt = 'boundaries'; - var tickson = coerce('tickson', ticksonDflt); - if(tickson === 'boundaries') { + if (isMultiCategory) { + coerce('tickson', 'boundaries'); delete containerOut.ticklabelposition; + } else { // category axis + coerce('tickson'); } } diff --git a/src/plots/cartesian/layout_attributes.js b/src/plots/cartesian/layout_attributes.js index 32afc99457a..9eb73a2477e 100644 --- a/src/plots/cartesian/layout_attributes.js +++ b/src/plots/cartesian/layout_attributes.js @@ -663,12 +663,13 @@ module.exports = { dflt: 'outside', editType: 'calc', description: [ - 'Determines where tick labels are drawn with respect to the axis', + 'Determines where tick labels are drawn with respect to the axis.', 'Please note that', - 'top or bottom has no effect on x axes or when `ticklabelmode` is set to *period*.', - 'Similarly', - 'left or right has no effect on y axes or when `ticklabelmode` is set to *period*.', - 'Has no effect on *multicategory* axes or when `tickson` is set to *boundaries*.', + 'top or bottom has no effect on x axes or when `ticklabelmode` is set to *period*', + 'or when `tickson` is set to *boundaries*. Similarly,', + 'left or right has no effect on y axes or when `ticklabelmode` is set to *period*', + 'or when `tickson` is set to *boundaries*.', + 'Has no effect on *multicategory* axes.', 'When used on axes linked by `matches` or `scaleanchor`,', 'no extra padding for inside labels would be added by autorange,', 'so that the scales could match.' diff --git a/test/image/mocks/zz-tickson_boundaries_ticklabelposition.json b/test/image/mocks/zz-tickson_boundaries_ticklabelposition.json new file mode 100644 index 00000000000..01962a67706 --- /dev/null +++ b/test/image/mocks/zz-tickson_boundaries_ticklabelposition.json @@ -0,0 +1,150 @@ +{ + "data": [ + { + "type": "box", + "x": [ + "day 1", + "day 1", + "day 1", + "day 1", + "day 1", + "day 1", + "day 2", + "day 2", + "day 2", + "day 2", + "day 2", + "day 2" + ], + "y": [0.2, 0.2, 0.6, 1, 0.5, 0.4, 0.2, 0.7, 0.9, 0.1, 0.5, 0.3] + }, + { + "type": "box", + "x": [ + "day 1", + "day 1", + "day 1", + "day 1", + "day 1", + "day 1", + "day 2", + "day 2", + "day 2", + "day 2", + "day 2", + "day 2" + ], + "y": [0.1, 0.3, 0.1, 0.9, 0.6, 0.6, 0.9, 1, 0.3, 0.6, 0.8, 0.5] + }, + { + "type": "box", + "x": [ + "day 1", + "day 1", + "day 1", + "day 1", + "day 1", + "day 1", + "day 2", + "day 2", + "day 2", + "day 2", + "day 2", + "day 2" + ], + "y": [0.6, 0.7, 0.3, 0.6, 0, 0.5, 0.7, 0.9, 0.5, 0.8, 0.7, 0.2] + }, + + { + "type": "bar", + "x": [1, 2, 1], + "y": ["apples", "bananas", "clementines"], + "orientation": "h", + "xaxis": "x2", + "yaxis": "y2" + }, + { + "type": "bar", + "x": [1.3, 2.2, 0.8], + "y": ["apples", "bananas", "clementines"], + "orientation": "h", + "xaxis": "x2", + "yaxis": "y2" + }, + { + "type": "bar", + "x": [3, 3.2, 1.8], + "y": ["apples", "bananas", "clementines"], + "orientation": "h", + "xaxis": "x2", + "yaxis": "y2" + }, + + { + "type": "bar", + "name": "with dtick !== 1", + "x": ["a", "b", "c", "d", "e", "f", "g", "h"], + "y": [1, 2, 1, 2, 1, 3, 4, 1], + "xaxis": "x3", + "yaxis": "y3" + }, + + { + "mode": "markers", + "marker": { "symbol": "square" }, + "name": "with overlapping tick labels", + "x": ["A very long title", "short", "Another very long title"], + "y": [0, 10, 2], + "xaxis": "x4", + "yaxis": "y4" + } + ], + "layout": { + "title": { + "text": "Although some ticklabelpositions have a side specified,
all category labels are expected to be centered." + }, + "boxmode": "group", + "grid": { + "rows": 4, + "columns": 1, + "pattern": "independent", + "ygap": 0.2 + }, + "xaxis": { + "ticklabelposition": "inside right", + "ticks": "outside", + "tickson": "boundaries", + "gridcolor": "white", + "gridwidth": 4 + }, + "yaxis2": { + "ticks": "inside", + "ticklabelposition": "inside top", + "tickson": "boundaries", + "gridcolor": "white", + "gridwidth": 4 + }, + "xaxis3": { + "ticks": "inside", + "ticklabelposition": "inside left", + "tickson": "boundaries", + "gridcolor": "white", + "gridwidth": 4, + "dtick": 2 + }, + "xaxis4": { + "domain": [0.22, 0.78], + "ticks": "outside", + "ticklabelposition": "inside", + "ticklen": 20, + "tickson": "boundaries", + "gridcolor": "white", + "gridwidth": 4 + }, + "plot_bgcolor": "lightgrey", + "showlegend": false, + "width": 500, + "height": 800, + "margin": { "b": 140 } + } +} From c84ae91e63f9f5e6ce0fc20bffd25a0227090e11 Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Wed, 7 May 2025 13:55:39 +0200 Subject: [PATCH 2/4] Add draftlog for 7420 --- draftlogs/7420_add.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/7420_add.md diff --git a/draftlogs/7420_add.md b/draftlogs/7420_add.md new file mode 100644 index 00000000000..5dd6fc712c6 --- /dev/null +++ b/draftlogs/7420_add.md @@ -0,0 +1 @@ + - Add support for ticklabelposition "inside"/"outside" for category axes with `tickson` set to "boundaries" [[#7420](https://github.com/plotly/plotly.js/pull/7420)] From 1ed81b2de67f76968bb358dd544f56e4f1acc4a3 Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Thu, 22 May 2025 17:10:34 +0200 Subject: [PATCH 3/4] Update test/plot-schema.json with new description of ticklabelposition --- test/plot-schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/plot-schema.json b/test/plot-schema.json index 403428a1457..25256d4b2a4 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -14711,7 +14711,7 @@ ] }, "ticklabelposition": { - "description": "Determines where tick labels are drawn with respect to the axis Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period*. Similarly left or right has no effect on y axes or when `ticklabelmode` is set to *period*. Has no effect on *multicategory* axes or when `tickson` is set to *boundaries*. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", + "description": "Determines where tick labels are drawn with respect to the axis. Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Similarly, left or right has no effect on y axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Has no effect on *multicategory* axes. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", "dflt": "outside", "editType": "calc", "valType": "enumerated", @@ -15955,7 +15955,7 @@ ] }, "ticklabelposition": { - "description": "Determines where tick labels are drawn with respect to the axis Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period*. Similarly left or right has no effect on y axes or when `ticklabelmode` is set to *period*. Has no effect on *multicategory* axes or when `tickson` is set to *boundaries*. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", + "description": "Determines where tick labels are drawn with respect to the axis. Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Similarly, left or right has no effect on y axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Has no effect on *multicategory* axes. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", "dflt": "outside", "editType": "calc", "valType": "enumerated", From 301e1ee7f2e25859ab9704d71d9a07327237276a Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Thu, 22 May 2025 17:43:05 +0200 Subject: [PATCH 4/4] Add baseline image for zz-tickson_boundaries_ticklabelposition --- .../zz-tickson_boundaries_ticklabelposition.png | Bin 0 -> 38533 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/zz-tickson_boundaries_ticklabelposition.png diff --git a/test/image/baselines/zz-tickson_boundaries_ticklabelposition.png b/test/image/baselines/zz-tickson_boundaries_ticklabelposition.png new file mode 100644 index 0000000000000000000000000000000000000000..5acf8e33d08a03087c8a2011848f364f8bd4101e GIT binary patch literal 38533 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�zYnelj`3;JxSZ%%hSqp%B+{(7II1|e)D z!u`M{lLng>0P5}$zf^Q1YK~OVeo$Jm7YjW$wmPDE-amE!O0fcwUDy6D!9~M|_^#e; zmtK&%Zls6Y3NMoFp=MVY+~)5Dn|@cp!Eb77Qus|5TO0X9aH1u%2e3ac=Ztn86Q_gIu zxi`H7VGI=?CJys#f3sFxoEvai$sI9{H`ej#<=S|jr(t*o_b}@Hx*OCvRcrN$y~OUy zJMj&Az}yBGW#1+ClIi#hBNirw7rJh^lm2WExWE66Lwib{!d426*xKNirk>*;@@4&O z5{qU}_T+0h#b>9)EQhs%QfVs4=AcLR8@y1_4AZ$h*CrE1Uy1!nP-v0h&5^0{JpD&i#k=${S$U}icH6DYLvJQ%=xNBKKXal)d!&+iZfEgSng9;Lg@0PcGpc3a}T ziBGQchQ3NX&H1??$z_wS=e@QXhF?!-e8lNtZg~q%pM7Dg&-$6jow9cOE$9$BJLr6X zkio9mR&8FX4eXJZlE<8JpnIkDi;-kHy+cs;ESK^ce_$=e-jw=`G$j^s$Wcg_bEkF? znvM>_OCEg58?AT74c+sC>hL!_?p`_QkT)Aib?CF%b+5kUV=Z!3P$j5UE__QmjCm7d zb5saJ7_kV8Uj@T<(h{S`|%fwGkZIsu5OeK zOE|hMp&GG%F4`(5&CK77QnJc`lJwWVlJKu&!8!A@L3zCoA8W^n)r(9oKtG=o=b1g` zBH!Q>`tm5OC5kJ>43gK6BT|JbA54x@6&JB0@0EK<=%1L-Vm_N|kXmZ+3lz>hf6pRX zqxXQ@S?7W{RK0zsH{;reA-bv)NRJ_(;n7ko^|;YPSZ(z$O}i3-A_ zo&=7LS#cI$JD+k8b)UqIaA_}XBaqtGzJ1@a+o2{=|@@ zhE=wYWLE*qQva$0WIfn(lzio!bKwYkAVbB;#vmvA&$omr@P17OWNqmljwk=K8DNJ; zUH$O;QFpSas3S*fy7Nx?rBeM$vF;?-e6oUe{>TN