From f5c038295616012143626272ee2bb7afdc520540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 15 Jun 2017 14:57:37 -0400 Subject: [PATCH 1/5] add category autorange mock for annotations and shapes --- test/image/baselines/category-autorange.png | Bin 0 -> 21341 bytes test/image/mocks/category-autorange.json | 86 ++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 test/image/baselines/category-autorange.png create mode 100644 test/image/mocks/category-autorange.json diff --git a/test/image/baselines/category-autorange.png b/test/image/baselines/category-autorange.png new file mode 100644 index 0000000000000000000000000000000000000000..4b18068ebc54807691e711fd73bd67af3f66ca6c GIT binary patch literal 21341 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 H4*$OZlB1_C literal 0 HcmV?d00001 diff --git a/test/image/mocks/category-autorange.json b/test/image/mocks/category-autorange.json new file mode 100644 index 00000000000..a83350591b9 --- /dev/null +++ b/test/image/mocks/category-autorange.json @@ -0,0 +1,86 @@ +{ + "data":[{ + "mode": "markers", + "x": ["a", "b", "c"], + "y": ["X", "Y", "Z"] + }, { + "mode": "markers", + "x": ["a", "b", "c"], + "y": ["X", "Y", "Z"], + "xaxis": "x2", + "yaxis": "y2" + }], + "layout":{ + "autosize":false, + "xaxis":{ + "domain": [0, 0.48], + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true + }, + "xaxis2":{ + "anchor": "y2", + "domain": [0.52, 1], + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true, + "range": [-0.5, 2.5] + }, + "yaxis":{ + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true + }, + "yaxis2":{ + "anchor": "x2", + "side": "right", + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true, + "range": [-0.5, 2.5] + }, + "height":360, + "width":600, + "showlegend": false, + "margin":{"r":40,"b":40,"l":40,"t":40}, + "title": "left: auto range || right: set range", + "titlefont": {"size": 12}, + "annotations":[{ + "axref": "x", "ayref": "y", + "text": "bump yrange up", + "x": "a", "y": 3, + "ax": "c", "ay": "3.5", + "xanchor": "left", + "borderpad": 10 + }, { + "axref": "x", "ayref": "y", + "text": "bump xrange
to the left", + "x": "-1", "y": "Y", + "ax": 0, "ay": "X" + }, { + "xref": "x2", "yref": "y2", + "text": "should not see this", + "x": "a", "y": 3 + }, { + "xref": "x2", "yref": "y2", + "text": "should not see this", + "x": "-1", "y": "Y" + }], + "shapes": [{ + "type": "rectangle", + "line": {"color": "purple"}, + "x0": "b", "x1": 4.5, + "y0": -1, "y1": "Z" + }, { + "xref": "x2", "yref": "y2", + "type": "rectangle", + "line": {"color": "purple"}, + "x0": "b", "x1": 4.5, + "y0": -1, "y1": "Z" + }] + } +} From d41126249c770a5b9f4c8695e4e0e4723a53de56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 15 Jun 2017 15:14:15 -0400 Subject: [PATCH 2/5] make category r2c handle strings values - fixes annotations autorange - does not appear to have any unwanted side-effects. --- src/plots/cartesian/set_convert.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plots/cartesian/set_convert.js b/src/plots/cartesian/set_convert.js index 1469d99a387..0101cb1b0cb 100644 --- a/src/plots/cartesian/set_convert.js +++ b/src/plots/cartesian/set_convert.js @@ -231,9 +231,9 @@ module.exports = function setConvert(ax, fullLayout) { ax.d2c = ax.d2l = setCategoryIndex; ax.r2d = ax.c2d = ax.l2d = getCategoryName; - ax.d2r = ax.d2l_noadd = getCategoryIndex; + ax.r2c = ax.d2r = ax.d2l_noadd = getCategoryIndex; - ax.l2r = ax.r2c = ax.c2r = ensureNumber; + ax.l2r = ax.c2r = ensureNumber; ax.r2l = getCategoryIndex; ax.d2p = function(v) { return ax.l2p(getCategoryIndex(v)); }; From e4aa7a3deab5b26df802506dd1ea25610002a9d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 16 Jun 2017 15:20:13 -0400 Subject: [PATCH 3/5] improve category autorange mock --- test/image/baselines/category-autorange.png | Bin 21341 -> 35820 bytes test/image/mocks/category-autorange.json | 159 +++++++++++++++++--- 2 files changed, 134 insertions(+), 25 deletions(-) diff --git a/test/image/baselines/category-autorange.png b/test/image/baselines/category-autorange.png index 4b18068ebc54807691e711fd73bd67af3f66ca6c..7fa82b03d8c38c2534f434da776bd0528c81abdb 100644 GIT binary patch literal 35820 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 HY(xJKy6&XM literal 21341 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 H4*$OZlB1_C diff --git a/test/image/mocks/category-autorange.json b/test/image/mocks/category-autorange.json index a83350591b9..bd786361689 100644 --- a/test/image/mocks/category-autorange.json +++ b/test/image/mocks/category-autorange.json @@ -2,17 +2,32 @@ "data":[{ "mode": "markers", "x": ["a", "b", "c"], - "y": ["X", "Y", "Z"] + "y": ["X", "Y", "Z"], + "xaxis": "x", + "yaxis": "y" }, { "mode": "markers", "x": ["a", "b", "c"], "y": ["X", "Y", "Z"], "xaxis": "x2", "yaxis": "y2" + }, { + "mode": "markers", + "x": ["a", "b", "c"], + "y": ["X", "Y", "Z"], + "xaxis": "x3", + "yaxis": "y3" + }, { + "mode": "markers", + "x": ["a", "b", "c"], + "y": ["X", "Y", "Z"], + "xaxis": "x4", + "yaxis": "y4" }], "layout":{ - "autosize":false, "xaxis":{ + "categoryarray": ["a", "b", "c", "d"], + "anchor": "x", "domain": [0, 0.48], "ticks": "outside", "mirror":"allticks", @@ -20,6 +35,7 @@ "showline":true }, "xaxis2":{ + "categoryarray": ["a", "b", "c", "d"], "anchor": "y2", "domain": [0.52, 1], "ticks": "outside", @@ -28,13 +44,40 @@ "showline":true, "range": [-0.5, 2.5] }, + "xaxis3":{ + "categoryarray": ["a", "b", "c", "d"], + "side": "top", + "anchor": "y3", + "domain": [0, 0.48], + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true + }, + "xaxis4":{ + "categoryarray": ["a", "b", "c", "d"], + "side": "top", + "anchor": "y4", + "domain": [0.52, 1], + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true, + "range": [-0.5, 2.5] + }, "yaxis":{ + "categoryarray": ["W", "X", "Y", "Z"], + "anchor": "y", + "title": "letter refs", + "domain": [0, 0.48], "ticks": "outside", "mirror":"allticks", "zeroline":false, "showline":true }, "yaxis2":{ + "categoryarray": ["W", "X", "Y", "Z"], + "domain": [0, 0.48], "anchor": "x2", "side": "right", "ticks": "outside", @@ -43,44 +86,110 @@ "showline":true, "range": [-0.5, 2.5] }, - "height":360, - "width":600, + "yaxis3":{ + "categoryarray": ["W", "X", "Y", "Z"], + "title": "number refs", + "domain": [0.52, 1], + "anchor": "x3", + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true + }, + "yaxis4":{ + "categoryarray": ["W", "X", "Y", "Z"], + "domain": [0.52, 1], + "anchor": "x4", + "side": "right", + "ticks": "outside", + "mirror":"allticks", + "zeroline":false, + "showline":true, + "range": [-0.5, 2.5] + }, + "height": 500, + "width": 500, "showlegend": false, - "margin":{"r":40,"b":40,"l":40,"t":40}, + "margin":{"r":40,"b":25,"l":40,"t":55}, "title": "left: auto range || right: set range", - "titlefont": {"size": 12}, + "font": {"size": 10}, "annotations":[{ - "axref": "x", "ayref": "y", - "text": "bump yrange up", - "x": "a", "y": 3, - "ax": "c", "ay": "3.5", - "xanchor": "left", - "borderpad": 10 + "xref": "x", "yref": "y", "axref": "x", "ayref": "y", + "text": "yrange bump", + "x": "a", "y": "X", "ax": "c", "ay": "Z", + "xanchor": "left", "yanchor": "bottom", "borderpad": 10 }, { - "axref": "x", "ayref": "y", - "text": "bump xrange
to the left", - "x": "-1", "y": "Y", - "ax": 0, "ay": "X" + "xref": "x", "yref": "y", "showarrow": false, + "text": "xrange bump", + "x": "a", "y": "X", + "xanchor": "right", "borderpad": 10 + }, + + { + "xref": "x2", "yref": "y2", "showarrow": false, + "text": "should not see this", + "x": "b", "y": "Z" }, { - "xref": "x2", "yref": "y2", + "xref": "x2", "yref": "y2", "showarrow": false, "text": "should not see this", - "x": "a", "y": 3 + "x": "d", "y": "X", + "xanchor": "right", "borderpad": 10 }, { - "xref": "x2", "yref": "y2", + "xref": "x2", "yref": "y2", "showarrow": false, + "text": "invalid category coords
should appear in center of graph", + "x": "wrong", "y": "not-gonna-work" + }, + + { + "xref": "x3", "yref": "y3", "axref": "x3", "ayref": "y3", + "text": "yrange bump", + "x": 1, "y": 2, "ax": 2, "ay": 4.5, + "xanchor": "left", "yanchor": "top", "borderpad": 10 + }, { + "xref": "x3", "yref": "y3", "showarrow": false, + "text": "xrange bump", + "x": -2, "y": 2, + "xanchor": "left", "borderpad": 10 + }, + + { + "xref": "x4", "yref": "y4", "showarrow": false, "text": "should not see this", - "x": "-1", "y": "Y" + "x": -2, "y": 2 + }, { + "xref": "x4", "yref": "y4", "showarrow": false, + "text": "should not see this", + "x": 2, "y": 4.5 }], "shapes": [{ "type": "rectangle", "line": {"color": "purple"}, - "x0": "b", "x1": 4.5, - "y0": -1, "y1": "Z" - }, { + "x0": "b", "x1": "d", + "y0": "W", "y1": "Z" + }, + + { "xref": "x2", "yref": "y2", "type": "rectangle", "line": {"color": "purple"}, - "x0": "b", "x1": 4.5, - "y0": -1, "y1": "Z" + "x0": "---", "x1": "d", + "y0": "wrong", "y1": "Z" + }, + + { + "xref": "x3", "yref": "y3", + "type": "rectangle", + "line": {"color": "purple"}, + "x0": 0.25, "x1": 6, + "y0": 1, "y1": 2.75 + }, + + { + "xref": "x4", "yref": "y4", + "type": "rectangle", + "line": {"color": "purple"}, + "x0": 0.25, "x1": 6, + "y0": 1, "y1": 2.75 }] } } From aaf12ba9cbbb465a21d2680efafa43cf8822c3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 16 Jun 2017 15:20:25 -0400 Subject: [PATCH 4/5] use r2c in shapes calc autorange --- src/components/shapes/calc_autorange.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/shapes/calc_autorange.js b/src/components/shapes/calc_autorange.js index 6f88b4aad96..c4bbbcd1e45 100644 --- a/src/components/shapes/calc_autorange.js +++ b/src/components/shapes/calc_autorange.js @@ -43,7 +43,7 @@ module.exports = function calcAutorange(gd) { }; function shapeBounds(ax, v0, v1, path, paramsToUse) { - var convertVal = (ax.type === 'category') ? Number : ax.d2c; + var convertVal = (ax.type === 'category') ? ax.r2c : ax.d2c; if(v0 !== undefined) return [convertVal(v0), convertVal(v1)]; if(!path) return; From 0758b3b48b8591001c002ede5d1d5c4d8dcc65a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 16 Jun 2017 15:23:23 -0400 Subject: [PATCH 5/5] convert invalid categories coords to middle of axis range - same as what Axes.coercePosition does at the defaults step for other axis types - post #1748, we need to handle this at the ax.r2c as the categories are only known after the calc step. --- src/plots/cartesian/set_convert.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plots/cartesian/set_convert.js b/src/plots/cartesian/set_convert.js index 0101cb1b0cb..5b885f80503 100644 --- a/src/plots/cartesian/set_convert.js +++ b/src/plots/cartesian/set_convert.js @@ -231,12 +231,17 @@ module.exports = function setConvert(ax, fullLayout) { ax.d2c = ax.d2l = setCategoryIndex; ax.r2d = ax.c2d = ax.l2d = getCategoryName; - ax.r2c = ax.d2r = ax.d2l_noadd = getCategoryIndex; + ax.d2r = ax.d2l_noadd = getCategoryIndex; + + ax.r2c = function(v) { + var index = getCategoryIndex(v); + return index !== undefined ? index : ax.fraction2r(0.5); + }; ax.l2r = ax.c2r = ensureNumber; ax.r2l = getCategoryIndex; - ax.d2p = function(v) { return ax.l2p(getCategoryIndex(v)); }; + ax.d2p = function(v) { return ax.l2p(ax.r2c(v)); }; ax.p2d = function(px) { return getCategoryName(p2l(px)); }; ax.r2p = ax.d2p; ax.p2r = p2l;