From baed872c821276bea6890ae613ff86cbdf28dc83 Mon Sep 17 00:00:00 2001 From: Matthias Matt Date: Mon, 17 Aug 2020 13:18:21 +0200 Subject: [PATCH 1/5] fixes selection behaviour of histogram plots --- .../javascript/plotlywidget/src/Figure.js | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/packages/javascript/plotlywidget/src/Figure.js b/packages/javascript/plotlywidget/src/Figure.js index 0124bfcafa2..9e5cdb0bb1f 100644 --- a/packages/javascript/plotlywidget/src/Figure.js +++ b/packages/javascript/plotlywidget/src/Figure.js @@ -888,20 +888,40 @@ var FigureView = widgets.DOMWidgetView.extend({ // Most cartesian plots var pointObjects = data["points"]; var numPoints = pointObjects.length; + + var hasNestedPointObjects = pointObjects.every(value => value.hasOwnProperty("pointNumbers")); + var numPointNumbers = numPoints; + if (hasNestedPointObjects) { + numPointNumbers = pointObjects.reduce((acc, v) => acc + v["pointNumbers"].length, 0) + } pointsObject = { - trace_indexes: new Array(numPoints), - point_indexes: new Array(numPoints), - xs: new Array(numPoints), - ys: new Array(numPoints), + trace_indexes: new Array(numPointNumbers), + point_indexes: new Array(numPointNumbers), + xs: new Array(numPointNumbers), + ys: new Array(numPointNumbers), }; - for (var p = 0; p < numPoints; p++) { - pointsObject["trace_indexes"][p] = pointObjects[p]["curveNumber"]; - pointsObject["point_indexes"][p] = pointObjects[p]["pointNumber"]; - pointsObject["xs"][p] = pointObjects[p]["x"]; - pointsObject["ys"][p] = pointObjects[p]["y"]; + var flatPointIndex = 0; + if (hasNestedPointObjects) { + for (var p = 0; p < numPoints; p++) { + for (let i = 0; i < pointObjects[p]["pointNumbers"].length; i++, flatPointIndex++) { + pointsObject["point_indexes"][flatPointIndex] = pointObjects[p]["pointNumbers"][i] + // also add xs, ys and traces so that the array doesn't get truncated later + pointsObject["xs"][flatPointIndex] = pointObjects[p]["x"]; + pointsObject["ys"][flatPointIndex] = pointObjects[p]["y"]; + pointsObject["trace_indexes"][flatPointIndex] = pointObjects[p]["curveNumber"]; + } + } + } else { + for (var p = 0; p < numPoints; p++) { + pointsObject["trace_indexes"][p] = pointObjects[p]["curveNumber"]; + pointsObject["point_indexes"][p] = pointObjects[p]["pointNumber"]; + pointsObject["xs"][p] = pointObjects[p]["x"]; + pointsObject["ys"][p] = pointObjects[p]["y"]; + } } + // Add z if present var hasZ = pointObjects[0] !== undefined && pointObjects[0].hasOwnProperty("z"); From 6b0b974e88c7a3d3cc2c003d05668850e02cc032 Mon Sep 17 00:00:00 2001 From: Matthias Matt Date: Mon, 17 Aug 2020 17:51:56 +0200 Subject: [PATCH 2/5] non ES6 reduce and every --- packages/javascript/plotlywidget/src/Figure.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/javascript/plotlywidget/src/Figure.js b/packages/javascript/plotlywidget/src/Figure.js index 9e5cdb0bb1f..fc56719e501 100644 --- a/packages/javascript/plotlywidget/src/Figure.js +++ b/packages/javascript/plotlywidget/src/Figure.js @@ -889,10 +889,17 @@ var FigureView = widgets.DOMWidgetView.extend({ var pointObjects = data["points"]; var numPoints = pointObjects.length; - var hasNestedPointObjects = pointObjects.every(value => value.hasOwnProperty("pointNumbers")); + var hasNestedPointObjects = true; + for (let i = 0; i < numPoints; i++) { + hasNestedPointObjects = (hasNestedPointObjects && pointObjects[i].hasOwnProperty("pointNumbers")); + if (!hasNestedPointObjects) break; + } var numPointNumbers = numPoints; if (hasNestedPointObjects) { - numPointNumbers = pointObjects.reduce((acc, v) => acc + v["pointNumbers"].length, 0) + numPointNumbers = 0; + for (let i = 0; i < numPoints; i++) { + numPointNumbers += pointObjects[i]["pointNumbers"].length; + } } pointsObject = { trace_indexes: new Array(numPointNumbers), From 238bea5798b5716e96d61a4bd32cbaef19bca0eb Mon Sep 17 00:00:00 2001 From: Matthias Matt Date: Mon, 17 Aug 2020 17:57:32 +0200 Subject: [PATCH 3/5] moved variable assignemnt of flatPointIndex inside of if statement --- packages/javascript/plotlywidget/src/Figure.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/javascript/plotlywidget/src/Figure.js b/packages/javascript/plotlywidget/src/Figure.js index fc56719e501..aa4e798870b 100644 --- a/packages/javascript/plotlywidget/src/Figure.js +++ b/packages/javascript/plotlywidget/src/Figure.js @@ -908,8 +908,8 @@ var FigureView = widgets.DOMWidgetView.extend({ ys: new Array(numPointNumbers), }; - var flatPointIndex = 0; if (hasNestedPointObjects) { + var flatPointIndex = 0; for (var p = 0; p < numPoints; p++) { for (let i = 0; i < pointObjects[p]["pointNumbers"].length; i++, flatPointIndex++) { pointsObject["point_indexes"][flatPointIndex] = pointObjects[p]["pointNumbers"][i] From 72613b3a86d2d1c0582cfd67c52978ec0d86ef28 Mon Sep 17 00:00:00 2001 From: Matthias Matt Date: Mon, 17 Aug 2020 18:02:25 +0200 Subject: [PATCH 4/5] removed line at the end of the last if statement --- packages/javascript/plotlywidget/src/Figure.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/javascript/plotlywidget/src/Figure.js b/packages/javascript/plotlywidget/src/Figure.js index aa4e798870b..4589001ce54 100644 --- a/packages/javascript/plotlywidget/src/Figure.js +++ b/packages/javascript/plotlywidget/src/Figure.js @@ -928,7 +928,6 @@ var FigureView = widgets.DOMWidgetView.extend({ } } - // Add z if present var hasZ = pointObjects[0] !== undefined && pointObjects[0].hasOwnProperty("z"); From 4c2a9a9bd683d82b79952d035719779f858c1f7c Mon Sep 17 00:00:00 2001 From: Matthias Matt Date: Mon, 17 Aug 2020 18:44:46 +0200 Subject: [PATCH 5/5] sorting of point indices --- packages/javascript/plotlywidget/src/Figure.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/javascript/plotlywidget/src/Figure.js b/packages/javascript/plotlywidget/src/Figure.js index 4589001ce54..a997ae75339 100644 --- a/packages/javascript/plotlywidget/src/Figure.js +++ b/packages/javascript/plotlywidget/src/Figure.js @@ -919,6 +919,9 @@ var FigureView = widgets.DOMWidgetView.extend({ pointsObject["trace_indexes"][flatPointIndex] = pointObjects[p]["curveNumber"]; } } + pointsObject["point_indexes"].sort(function(a, b) { + return a - b; + }); } else { for (var p = 0; p < numPoints; p++) { pointsObject["trace_indexes"][p] = pointObjects[p]["curveNumber"];