diff --git a/src/js/charts/AxisChart.js b/src/js/charts/AxisChart.js index b2b1d162..5a93479c 100644 --- a/src/js/charts/AxisChart.js +++ b/src/js/charts/AxisChart.js @@ -60,7 +60,7 @@ export default class AxisChart extends BaseChart { values = values.concat(this.y_sums); } - this.y_axis_values = calcIntervals(values, this.type === 'line'); + this.y_axis_values = calcIntervals(values, this.type === 'line', this.y_axis_exp_based_on_range === true); if(!this.y_old_axis_values) { this.y_old_axis_values = this.y_axis_values.slice(); diff --git a/src/js/charts/LineChart.js b/src/js/charts/LineChart.js index e03bb285..21390a64 100644 --- a/src/js/charts/LineChart.js +++ b/src/js/charts/LineChart.js @@ -21,6 +21,7 @@ export default class LineChart extends AxisChart { this.dot_radius = args.dot_radius || 4; this.heatline = args.heatline; this.type = 'line'; + this.y_axis_exp_based_on_range = args.y_axis_exp_based_on_range; this.setup(); } diff --git a/src/js/utils/intervals.js b/src/js/utils/intervals.js index bee3568f..529b435d 100644 --- a/src/js/utils/intervals.js +++ b/src/js/utils/intervals.js @@ -59,8 +59,17 @@ function getRangeIntervals(max, min=0) { return intervals; } -function getIntervals(maxValue, minValue=0) { - let [normalMaxValue, exponent] = normalize(maxValue); +function getIntervals(maxValue, minValue=0, expBasedOnRange=false) { + let exponent, normalMaxValue; + + if (expBasedOnRange) { + let range = maxValue - minValue; + exponent = normalize(range)[1]; + normalMaxValue = maxValue/Math.pow(10, exponent); + } else { + [normalMaxValue, exponent] = normalize(maxValue); + } + let normalMinValue = minValue ? minValue/Math.pow(10, exponent): 0; // Allow only 7 significant digits @@ -71,7 +80,7 @@ function getIntervals(maxValue, minValue=0) { return intervals; } -export function calcIntervals(values, withMinimum=false) { +export function calcIntervals(values, withMinimum=false, expBasedOnRange=false) { //*** Where the magic happens *** // Calculates best-fit y intervals from given values @@ -104,7 +113,7 @@ export function calcIntervals(values, withMinimum=false) { if(!withMinimum) { intervals = getIntervals(maxValue); } else { - intervals = getIntervals(maxValue, minValue); + intervals = getIntervals(maxValue, minValue, expBasedOnRange); } } @@ -144,7 +153,7 @@ export function calcIntervals(values, withMinimum=false) { if(!withMinimum) { intervals = getIntervals(pseudoMaxValue); } else { - intervals = getIntervals(pseudoMaxValue, pseudoMinValue); + intervals = getIntervals(pseudoMaxValue, pseudoMinValue, expBasedOnRange); } intervals = intervals.reverse().map(d => d * (-1));