From 1ac3119648ae184b00cb970b48ca5e0dfcbf66dc Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Sat, 8 Oct 2016 23:29:30 +0300 Subject: [PATCH 1/2] Add: control over y axis min/max values --- rd_ui/app/scripts/directives/plotly.js | 31 +++++++++++++++++++ .../views/visualizations/chart_editor.html | 8 +++++ 2 files changed, 39 insertions(+) diff --git a/rd_ui/app/scripts/directives/plotly.js b/rd_ui/app/scripts/directives/plotly.js index 267201bef8..d33ce6325e 100644 --- a/rd_ui/app/scripts/directives/plotly.js +++ b/rd_ui/app/scripts/directives/plotly.js @@ -140,6 +140,22 @@ } return value; } + + function seriesMinValue(series) { + return _.min(_.map(series, function(s) { return _.min(series.y) })); + } + + function seriesMaxValue(series) { + return _.max(_.map(series, function(s) { return _.max(series.y) })); + } + + function leftAxisSeries(series) { + return _.filter(series, function(s) { return s.yaxis !== 'y2' }); + } + + function rightAxisSeries(series) { + return _.filter(series, function(s) { return s.yaxis === 'y2' }); + } angular.module('plotly', []) .constant('ColorPalette', ColorPalette) @@ -278,6 +294,7 @@ return null; }; + scope.layout.xaxis = {title: getTitle(scope.options.xAxis), type: getScaleType(scope.options.xAxis.type)}; if (angular.isDefined(scope.options.xAxis.labels)) { @@ -286,12 +303,26 @@ if (angular.isArray(scope.options.yAxis)) { scope.layout.yaxis = {title: getTitle(scope.options.yAxis[0]), type: getScaleType(scope.options.yAxis[0].type)}; + + if (scope.options.yAxis[0].rangeMin || scope.options.yAxis[0].rangeMax) { + var min = scope.options.yAxis[0].rangeMin || Math.min(0, seriesMinValue(leftAxisSeries(scope.data))); + var max = scope.options.yAxis[0].rangeMax || seriesMaxValue(leftAxisSeries(scope.data)); + + scope.layout.yaxis.range = [min, max]; + } } if (hasY2 && angular.isDefined(scope.options.yAxis)) { scope.layout.yaxis2 = {title: getTitle(scope.options.yAxis[1]), type: getScaleType(scope.options.yAxis[1].type), overlaying: 'y', side: 'right'}; + + if (scope.options.yAxis[1].rangeMin || scope.options.yAxis[0].rangeMax) { + var min = scope.options.yAxis[1].rangeMin || Math.min(0, seriesMinValue(rightAxisSeries(scope.data))); + var max = scope.options.yAxis[1].rangeMax || seriesMaxValue(rightAxisSeries(scope.data)); + + scope.layout.yaxis2.range = [min, max]; + } } else { delete scope.layout.yaxis2; } diff --git a/rd_ui/app/views/visualizations/chart_editor.html b/rd_ui/app/views/visualizations/chart_editor.html index c9d5ddbac6..bbd1ab80b5 100644 --- a/rd_ui/app/views/visualizations/chart_editor.html +++ b/rd_ui/app/views/visualizations/chart_editor.html @@ -135,6 +135,14 @@

{{$index == 0 ? 'Left' : 'Right'}} Y Axis

+
+ + +
+
+ + +
From 08676a3d0b1850a84c92ed413f7e30a81c16b273 Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Sun, 9 Oct 2016 09:06:33 +0300 Subject: [PATCH 2/2] Fix: 0 is falsy, so need to check differently if there is value defined. --- rd_ui/app/scripts/directives/plotly.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rd_ui/app/scripts/directives/plotly.js b/rd_ui/app/scripts/directives/plotly.js index d33ce6325e..aa1e96e532 100644 --- a/rd_ui/app/scripts/directives/plotly.js +++ b/rd_ui/app/scripts/directives/plotly.js @@ -140,7 +140,7 @@ } return value; } - + function seriesMinValue(series) { return _.min(_.map(series, function(s) { return _.min(series.y) })); } @@ -304,7 +304,7 @@ scope.layout.yaxis = {title: getTitle(scope.options.yAxis[0]), type: getScaleType(scope.options.yAxis[0].type)}; - if (scope.options.yAxis[0].rangeMin || scope.options.yAxis[0].rangeMax) { + if (angular.isNumber(scope.options.yAxis[0].rangeMin) || angular.isNumber(scope.options.yAxis[0].rangeMax)) { var min = scope.options.yAxis[0].rangeMin || Math.min(0, seriesMinValue(leftAxisSeries(scope.data))); var max = scope.options.yAxis[0].rangeMax || seriesMaxValue(leftAxisSeries(scope.data)); @@ -317,7 +317,7 @@ overlaying: 'y', side: 'right'}; - if (scope.options.yAxis[1].rangeMin || scope.options.yAxis[0].rangeMax) { + if (angular.isNumber(scope.options.yAxis[1].rangeMin) || angular.isNumber(scope.options.yAxis[1].rangeMax)) { var min = scope.options.yAxis[1].rangeMin || Math.min(0, seriesMinValue(rightAxisSeries(scope.data))); var max = scope.options.yAxis[1].rangeMax || seriesMaxValue(rightAxisSeries(scope.data));