From 68b489d3e3e0e0a791c81dd8bf2fd43c8bb17c2e Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Fri, 31 Aug 2018 23:12:24 -0400 Subject: [PATCH] continue lines off the edge toward invalid log values --- src/constants/numerical.js | 6 +++ src/plots/cartesian/set_convert.js | 10 ++--- src/traces/scatter/line_points.js | 48 +++++++++++++++++------ test/image/baselines/log_lines_fills.png | Bin 0 -> 56846 bytes test/image/mocks/log_lines_fills.json | 33 ++++++++++++++++ 5 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 test/image/baselines/log_lines_fills.png create mode 100644 test/image/mocks/log_lines_fills.json diff --git a/src/constants/numerical.js b/src/constants/numerical.js index c13765d95bb..77ea5abf465 100644 --- a/src/constants/numerical.js +++ b/src/constants/numerical.js @@ -49,6 +49,12 @@ module.exports = { */ ALMOST_EQUAL: 1 - 1e-6, + /* + * If we're asked to clip a non-positive log value, how far off-screen + * do we put it? + */ + LOG_CLIP: 10, + /* * not a number, but for displaying numbers: the "minus sign" symbol is * wider than the regular ascii dash "-" diff --git a/src/plots/cartesian/set_convert.js b/src/plots/cartesian/set_convert.js index b239ffb2e58..e057aba7b20 100644 --- a/src/plots/cartesian/set_convert.js +++ b/src/plots/cartesian/set_convert.js @@ -21,6 +21,7 @@ var ensureNumber = Lib.ensureNumber; var numConstants = require('../../constants/numerical'); var FP_SAFE = numConstants.FP_SAFE; var BADNUM = numConstants.BADNUM; +var LOG_CLIP = numConstants.LOG_CLIP; var constants = require('./constants'); var axisIds = require('./axis_ids'); @@ -59,20 +60,15 @@ module.exports = function setConvert(ax, fullLayout) { var axLetter = (ax._id || 'x').charAt(0); - // clipMult: how many axis lengths past the edge do we render? - // for panning, 1-2 would suffice, but for zooming more is nice. - // also, clipping can affect the direction of lines off the edge... - var clipMult = 10; - function toLog(v, clip) { if(v > 0) return Math.log(v) / Math.LN10; else if(v <= 0 && clip && ax.range && ax.range.length === 2) { - // clip NaN (ie past negative infinity) to clipMult axis + // clip NaN (ie past negative infinity) to LOG_CLIP axis // length past the negative edge var r0 = ax.range[0], r1 = ax.range[1]; - return 0.5 * (r0 + r1 - 3 * clipMult * Math.abs(r0 - r1)); + return 0.5 * (r0 + r1 - 2 * LOG_CLIP * Math.abs(r0 - r1)); } else return BADNUM; diff --git a/src/traces/scatter/line_points.js b/src/traces/scatter/line_points.js index 8e498e46466..bf18df449a8 100644 --- a/src/traces/scatter/line_points.js +++ b/src/traces/scatter/line_points.js @@ -9,7 +9,11 @@ 'use strict'; -var BADNUM = require('../../constants/numerical').BADNUM; +var numConstants = require('../../constants/numerical'); +var BADNUM = numConstants.BADNUM; +var LOG_CLIP = numConstants.LOG_CLIP; +var LOG_CLIP_PLUS = LOG_CLIP + 0.5; +var LOG_CLIP_MINUS = LOG_CLIP - 0.5; var Lib = require('../../lib'); var segmentsIntersect = Lib.segmentsIntersect; var constrain = Lib.constrain; @@ -19,6 +23,10 @@ var constants = require('./constants'); module.exports = function linePoints(d, opts) { var xa = opts.xaxis; var ya = opts.yaxis; + var xLog = xa.type === 'log'; + var yLog = ya.type === 'log'; + var xLen = xa._length; + var yLen = ya._length; var connectGaps = opts.connectGaps; var baseTolerance = opts.baseTolerance; var shape = opts.shape; @@ -59,7 +67,25 @@ module.exports = function linePoints(d, opts) { if(!di) return false; var x = xa.c2p(di.x); var y = ya.c2p(di.y); - if(x === BADNUM || y === BADNUM) return false; + + // if non-positive log values, set them VERY far off-screen + // so the line looks essentially straight from the previous point. + if(x === BADNUM) { + if(xLog) x = xa.c2p(di.x, true); + if(x === BADNUM) return false; + // If BOTH were bad log values, make the line follow a constant + // exponent rather than a constant slope + if(yLog && y === BADNUM) { + x *= Math.abs(xa._m * yLen * (xa._m > 0 ? LOG_CLIP_PLUS : LOG_CLIP_MINUS) / + (ya._m * xLen * (ya._m > 0 ? LOG_CLIP_PLUS : LOG_CLIP_MINUS))); + } + x *= 1000; + } + if(y === BADNUM) { + if(yLog) y = ya.c2p(di.y, true); + if(y === BADNUM) return false; + y *= 1000; + } return [x, y]; } @@ -79,8 +105,8 @@ module.exports = function linePoints(d, opts) { var latestXFrac, latestYFrac; // if we're off-screen, increase tolerance over baseTolerance function getTolerance(pt, nextPt) { - var xFrac = pt[0] / xa._length; - var yFrac = pt[1] / ya._length; + var xFrac = pt[0] / xLen; + var yFrac = pt[1] / yLen; var offScreenFraction = Math.max(0, -xFrac, xFrac - 1, -yFrac, yFrac - 1); if(offScreenFraction && (latestXFrac !== undefined) && crossesViewport(xFrac, yFrac, latestXFrac, latestYFrac) @@ -88,7 +114,7 @@ module.exports = function linePoints(d, opts) { offScreenFraction = 0; } if(offScreenFraction && nextPt && - crossesViewport(xFrac, yFrac, nextPt[0] / xa._length, nextPt[1] / ya._length) + crossesViewport(xFrac, yFrac, nextPt[0] / xLen, nextPt[1] / yLen) ) { offScreenFraction = 0; } @@ -114,10 +140,10 @@ module.exports = function linePoints(d, opts) { // if both are outside there will be 0 or 2 intersections // (or 1 if it's right at a corner - we'll treat that like 0) // returns an array of intersection pts - var xEdge0 = -xa._length * maxScreensAway; - var xEdge1 = xa._length * (1 + maxScreensAway); - var yEdge0 = -ya._length * maxScreensAway; - var yEdge1 = ya._length * (1 + maxScreensAway); + var xEdge0 = -xLen * maxScreensAway; + var xEdge1 = xLen * (1 + maxScreensAway); + var yEdge0 = -yLen * maxScreensAway; + var yEdge1 = yLen * (1 + maxScreensAway); var edges = [ [xEdge0, yEdge0, xEdge1, yEdge0], [xEdge1, yEdge0, xEdge1, yEdge1], @@ -261,8 +287,8 @@ module.exports = function linePoints(d, opts) { } function addPt(pt) { - latestXFrac = pt[0] / xa._length; - latestYFrac = pt[1] / ya._length; + latestXFrac = pt[0] / xLen; + latestYFrac = pt[1] / yLen; // Are we more than maxScreensAway off-screen any direction? // if so, clip to this box, but in such a way that on-screen // drawing is unchanged diff --git a/test/image/baselines/log_lines_fills.png b/test/image/baselines/log_lines_fills.png new file mode 100644 index 0000000000000000000000000000000000000000..1602708971b9a35ce91c906b9f1e4268697daeab GIT binary patch literal 56846 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/log_lines_fills.json b/test/image/mocks/log_lines_fills.json new file mode 100644 index 00000000000..059d3f59382 --- /dev/null +++ b/test/image/mocks/log_lines_fills.json @@ -0,0 +1,33 @@ +{ + "data": [{ + "x": [-1, 1.5, 2, 0, 1, 3, 4, 5, 6, 1, -1, -1, 3, 3, 0, 7, 7, -1, -1], + "y": [-1, 1.5, 1, -1, -1, 1, 1, 0, 2, 2, 0, 2, 3, 4, 5, 6, -2, -2, -1], + "mode": "markers+lines", "fill": "toself" + }, { + "x": [-1, 1.5, 2, 0, 1, 3, 4, 5, 6, 1, -1, -1, 3, 3, 0, 7, 7, -1, -1], + "y": [-1, 1.5, 1, -1, -1, 1, 1, 0, 2, 2, 0, 2, 3, 4, 5, 6, -2, -2, -1], + "mode": "markers+lines", "fill": "toself", "xaxis": "x2" + }, { + "x": [-1, 1.5, 2, 0, 1, 3, 4, 5, 6, 1, -1, -1, 3, 3, 0, 7, 7, -1, -1], + "y": [-1, 1.5, 1, -1, -1, 1, 1, 0, 2, 2, 0, 2, 3, 4, 5, 6, -2, -2, -1], + "mode": "markers+lines", "fill": "toself", "yaxis": "y2" + }, { + "x": [-1, 1.5, 2, 0, 1, 3, 4, 5, 6, 1, -1, -1, 3, 3, 0, 7, 7, -1, -1], + "y": [-1, 1.5, 1, -1, -1, 1, 1, 0, 2, 2, 0, 2, 3, 4, 5, 6, -2, -2, -1], + "mode": "markers+lines", "fill": "toself", "xaxis": "x2", "yaxis": "y2" + }, { + "x": [0.01, 0.1], "y": [0.01, 0.1], + "mode": "markers", "xaxis": "x2", "yaxis": "y2" + }], + "layout": { + "width": 800, + "height": 600, + "xaxis": {"title": "linear"}, + "xaxis2": {"title": "log", "type": "log"}, + "yaxis": {"title": "linear"}, + "yaxis2": {"title": "log", "type": "log"}, + "grid": {"columns": 2, "rows": 2}, + "showlegend": false, + "title": "Lines to invalid log values" + } +}