UNPKG

@progress/kendo-charts

Version:

Kendo UI platform-independent Charts library

61 lines (45 loc) 1.75 kB
import calculateSlope from './calculate-slope'; import checkAllPositive from './check-all-positive'; import getScatterTrendlineData from './get-scatter-trendline-data'; import xValueLimits from './x-value-limits'; function scatterLogarithmicTrendline(context) { var options = context.options; var seriesValues = context.seriesValues; var data = getData({ seriesValues: seriesValues, options: options }); if (data) { return Object.assign({}, options, {type: 'scatterLine', data: data}); } return null; } var valueGetter = function (fieldName) { return function (ref) { var valueFields = ref.valueFields; return ({ xValue: valueFields.x, yValue: valueFields[fieldName] }); ; } }; var logValueGetter = function (fieldName) { return function (ref) { var valueFields = ref.valueFields; return ({ xValue: Math.log(valueFields.x), yValue: valueFields[fieldName] }); ; } }; function getData(ref) { var seriesValues = ref.seriesValues; var options = ref.options; var sourceValues = seriesValues(); if (!checkAllPositive(sourceValues, 'x')) { return null; } var ref$1 = calculateSlope(sourceValues, logValueGetter(options.field)); var slope = ref$1.slope; var intercept = ref$1.intercept; var count = ref$1.count; var range = xValueLimits(sourceValues, valueGetter(options.field)); if (count > 0) { // Logarithmic trendline equation: // y = a * ln (x) + b var a = slope; var b = intercept; return getScatterTrendlineData(function (x) { return a * Math.log(x) + b; }, range, options.trendline); } return null; } export default scatterLogarithmicTrendline;