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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy