@progress/kendo-charts 2.7.2-dev.202502101310 → 2.7.2-develop.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/js/kendo-charts.js +1 -1
- package/dist/cdn/main.js +1 -1
- package/dist/es/barcode/barcode-validator.js +10 -12
- package/dist/es/barcode/barcode.js +84 -96
- package/dist/es/barcode/encodings/code11.js +41 -57
- package/dist/es/barcode/encodings/code128.js +222 -354
- package/dist/es/barcode/encodings/code39-extended.js +20 -34
- package/dist/es/barcode/encodings/code39.js +49 -75
- package/dist/es/barcode/encodings/code93-extended.js +12 -24
- package/dist/es/barcode/encodings/code93.js +52 -70
- package/dist/es/barcode/encodings/ean13.js +28 -42
- package/dist/es/barcode/encodings/ean8.js +8 -18
- package/dist/es/barcode/encodings/encoding.js +18 -24
- package/dist/es/barcode/encodings/main.js +13 -10
- package/dist/es/barcode/encodings/msi.js +56 -112
- package/dist/es/barcode/encodings/postnet.js +31 -45
- package/dist/es/barcode/surface-size.js +2 -2
- package/dist/es/chart/aggregates/aggregates.js +23 -23
- package/dist/es/chart/aggregates/default-aggregates.js +10 -18
- package/dist/es/chart/aggregates/series-aggregator.js +42 -54
- package/dist/es/chart/animations/bar-chart-animation.js +15 -26
- package/dist/es/chart/animations/bubble-animation.js +7 -17
- package/dist/es/chart/animations/clip-animation.js +13 -23
- package/dist/es/chart/animations/fade-in-animation.js +6 -16
- package/dist/es/chart/animations/pie-animation.js +6 -16
- package/dist/es/chart/api-elements/chart-axis.js +14 -22
- package/dist/es/chart/api-elements/chart-pane.js +10 -8
- package/dist/es/chart/api-elements/chart-plotarea.js +4 -10
- package/dist/es/chart/api-elements/find-axis-by-name.js +1 -1
- package/dist/es/chart/area-chart/area-chart.js +46 -60
- package/dist/es/chart/area-chart/area-segment.js +46 -52
- package/dist/es/chart/area-chart/spline-area-segment.js +12 -21
- package/dist/es/chart/area-chart/step-area-segment.js +6 -15
- package/dist/es/chart/axis-group-range-tracker.js +14 -20
- package/dist/es/chart/bar-chart/bar-chart.js +65 -80
- package/dist/es/chart/bar-chart/bar-label.js +25 -32
- package/dist/es/chart/bar-chart/bar.js +76 -91
- package/dist/es/chart/box-plot-chart/box-plot-chart.js +33 -48
- package/dist/es/chart/box-plot-chart/box-plot.js +55 -68
- package/dist/es/chart/box-plot-chart/vertical-box-plot.js +13 -23
- package/dist/es/chart/bubble-chart/bubble-chart.js +51 -64
- package/dist/es/chart/bubble-chart/bubble.js +21 -27
- package/dist/es/chart/bullet-chart/bullet-chart.js +45 -57
- package/dist/es/chart/bullet-chart/bullet.js +48 -57
- package/dist/es/chart/bullet-chart/target.js +1 -11
- package/dist/es/chart/candlestick-chart/candlestick-chart.js +41 -55
- package/dist/es/chart/candlestick-chart/candlestick.js +60 -69
- package/dist/es/chart/categorical-chart.js +178 -206
- package/dist/es/chart/chart-container.js +30 -39
- package/dist/es/chart/chart.js +641 -701
- package/dist/es/chart/constants.js +103 -103
- package/dist/es/chart/crosshair/crosshair-tooltip.js +22 -34
- package/dist/es/chart/crosshair/crosshair.js +39 -47
- package/dist/es/chart/donut-chart/donut-chart.js +36 -48
- package/dist/es/chart/donut-chart/donut-segment.js +12 -24
- package/dist/es/chart/error-bars/categorical-error-bar.js +5 -15
- package/dist/es/chart/error-bars/error-bar-base.js +37 -49
- package/dist/es/chart/error-bars/error-range-calculator.js +46 -56
- package/dist/es/chart/error-bars/scatter-error-bar.js +6 -16
- package/dist/es/chart/funnel-chart/funnel-chart.js +86 -103
- package/dist/es/chart/funnel-chart/funnel-segment.js +46 -54
- package/dist/es/chart/funnel-chart/pyramid-chart.js +5 -11
- package/dist/es/chart/heatmap-chart/color-scale.js +7 -9
- package/dist/es/chart/heatmap-chart/heatmap-chart.js +87 -110
- package/dist/es/chart/heatmap-chart/heatmap-point.js +72 -78
- package/dist/es/chart/highlight.js +26 -36
- package/dist/es/chart/layout/cluster-layout.js +16 -25
- package/dist/es/chart/layout/radar-cluster-layout.js +15 -24
- package/dist/es/chart/layout/radar-stack-layout.js +10 -22
- package/dist/es/chart/layout/stack-wrap.js +12 -24
- package/dist/es/chart/layout/utils.js +2 -2
- package/dist/es/chart/legend/legend-item-line-area.js +8 -19
- package/dist/es/chart/legend/legend-item-line.js +21 -31
- package/dist/es/chart/legend/legend-item-marker.js +18 -28
- package/dist/es/chart/legend/legend-item-square.js +8 -18
- package/dist/es/chart/legend/legend-item.js +91 -105
- package/dist/es/chart/legend/legend-layout.js +18 -25
- package/dist/es/chart/legend/legend.js +68 -92
- package/dist/es/chart/line-chart/line-chart.js +35 -48
- package/dist/es/chart/line-chart/line-point.js +90 -103
- package/dist/es/chart/line-chart/line-segment.js +23 -34
- package/dist/es/chart/line-chart/spline-segment.js +10 -20
- package/dist/es/chart/line-chart/step-line-mixin.js +14 -17
- package/dist/es/chart/line-chart/step-line-segment.js +4 -14
- package/dist/es/chart/mixins/accessibility-attributes-mixin.js +7 -7
- package/dist/es/chart/mixins/clip-animation-mixin.js +7 -7
- package/dist/es/chart/mixins/line-chart-mixin.js +27 -31
- package/dist/es/chart/mixins/note-mixin.js +3 -3
- package/dist/es/chart/mixins/pie-chart-mixin.js +9 -9
- package/dist/es/chart/mixins/plotarea-events-mixin.js +1 -1
- package/dist/es/chart/mixins/point-events-mixin.js +1 -1
- package/dist/es/chart/ohlc-chart/ohlc-chart.js +4 -14
- package/dist/es/chart/ohlc-chart/ohlc-point.js +15 -28
- package/dist/es/chart/pan-and-zoom/accept-key.js +3 -3
- package/dist/es/chart/pan-and-zoom/mousewheel-zoom.js +25 -33
- package/dist/es/chart/pan-and-zoom/pannable.js +29 -37
- package/dist/es/chart/pan-and-zoom/to-chart-axis-ranges.js +3 -3
- package/dist/es/chart/pan-and-zoom/zoom-selection.js +61 -70
- package/dist/es/chart/pane.js +71 -79
- package/dist/es/chart/pie-chart/pie-chart.js +153 -183
- package/dist/es/chart/pie-chart/pie-segment.js +82 -98
- package/dist/es/chart/plotarea/categorical-plotarea.js +285 -318
- package/dist/es/chart/plotarea/donut-plotarea.js +12 -22
- package/dist/es/chart/plotarea/funnel-plotarea.js +17 -27
- package/dist/es/chart/plotarea/heatmap-plotarea.js +139 -167
- package/dist/es/chart/plotarea/pie-plotarea.js +15 -25
- package/dist/es/chart/plotarea/plotarea-base.js +423 -462
- package/dist/es/chart/plotarea/plotarea-factory.js +15 -20
- package/dist/es/chart/plotarea/polar-plotarea-base.js +37 -51
- package/dist/es/chart/plotarea/polar-plotarea.js +39 -49
- package/dist/es/chart/plotarea/radar-plotarea.js +55 -65
- package/dist/es/chart/plotarea/xy-plotarea.js +111 -128
- package/dist/es/chart/polar-area-chart/polar-area-chart.js +22 -36
- package/dist/es/chart/polar-area-chart/polar-area-segment.js +7 -17
- package/dist/es/chart/polar-area-chart/spline-polar-area-segment.js +15 -25
- package/dist/es/chart/polar-line-chart/polar-line-chart.js +2 -11
- package/dist/es/chart/polar-scatter-chart/polar-scatter-chart.js +6 -16
- package/dist/es/chart/radar-area-chart/radar-area-chart.js +11 -21
- package/dist/es/chart/radar-area-chart/radar-area-segment.js +3 -13
- package/dist/es/chart/radar-area-chart/spline-radar-area-segment.js +3 -13
- package/dist/es/chart/radar-bar-chart/radar-bar-chart.js +19 -29
- package/dist/es/chart/radar-bar-chart/radar-segment.js +6 -12
- package/dist/es/chart/radar-line-chart/radar-line-chart.js +26 -35
- package/dist/es/chart/range-area-chart/range-area-chart.js +46 -58
- package/dist/es/chart/range-area-chart/range-area-point.js +55 -66
- package/dist/es/chart/range-area-chart/range-area-segment.js +19 -28
- package/dist/es/chart/range-area-chart/range-line-point.js +4 -14
- package/dist/es/chart/range-area-chart/spline-range-area-segment.js +11 -18
- package/dist/es/chart/range-area-chart/step-range-area-segment.js +7 -16
- package/dist/es/chart/range-bar-chart/range-bar-chart.js +18 -29
- package/dist/es/chart/range-bar-chart/range-bar.js +10 -23
- package/dist/es/chart/register-charts.js +20 -16
- package/dist/es/chart/scatter-charts/scatter-chart.js +100 -122
- package/dist/es/chart/scatter-charts/scatter-line-chart.js +15 -25
- package/dist/es/chart/selection.js +176 -201
- package/dist/es/chart/series-binder.js +55 -66
- package/dist/es/chart/theme/base-theme.js +75 -79
- package/dist/es/chart/theme/load-theme.js +52 -52
- package/dist/es/chart/tooltip/base-tooltip.js +17 -24
- package/dist/es/chart/tooltip/shared-tooltip.js +25 -31
- package/dist/es/chart/tooltip/tooltip.js +10 -20
- package/dist/es/chart/trendlines/calculate-moving-average.js +11 -13
- package/dist/es/chart/trendlines/calculate-polynomial.js +24 -26
- package/dist/es/chart/trendlines/calculate-slope.js +12 -14
- package/dist/es/chart/trendlines/check-all-positive.js +2 -5
- package/dist/es/chart/trendlines/exponential-trendline.js +15 -24
- package/dist/es/chart/trendlines/get-scatter-trendline-data.js +6 -7
- package/dist/es/chart/trendlines/get-trendline-data.js +6 -6
- package/dist/es/chart/trendlines/linear-trendline.js +12 -21
- package/dist/es/chart/trendlines/logarithmic-trendline.js +14 -23
- package/dist/es/chart/trendlines/moving-average.js +15 -26
- package/dist/es/chart/trendlines/polynomial-trendline.js +13 -21
- package/dist/es/chart/trendlines/power-trendline.js +15 -24
- package/dist/es/chart/trendlines/scatter-exponential-trendline.js +15 -24
- package/dist/es/chart/trendlines/scatter-linear-trendline.js +10 -16
- package/dist/es/chart/trendlines/scatter-logarithmic-trendline.js +17 -27
- package/dist/es/chart/trendlines/scatter-moving-average.js +7 -10
- package/dist/es/chart/trendlines/scatter-polynomial-trendline.js +11 -16
- package/dist/es/chart/trendlines/scatter-power-trendline.js +15 -22
- package/dist/es/chart/trendlines/scatter-trendline-registry.js +1 -1
- package/dist/es/chart/trendlines/scatter-value-getter.js +2 -5
- package/dist/es/chart/trendlines/trendline-factory.js +1 -1
- package/dist/es/chart/trendlines/trendline-registry.js +1 -1
- package/dist/es/chart/trendlines/x-value-limits.js +6 -8
- package/dist/es/chart/utils/any-has-z-index.js +1 -1
- package/dist/es/chart/utils/bind-segments.js +8 -8
- package/dist/es/chart/utils/categories-count.js +3 -3
- package/dist/es/chart/utils/count-numbers.js +4 -4
- package/dist/es/chart/utils/create-out-of-range-points.js +13 -22
- package/dist/es/chart/utils/eval-options.js +7 -10
- package/dist/es/chart/utils/filter-series-by-type.js +4 -4
- package/dist/es/chart/utils/get-field.js +1 -1
- package/dist/es/chart/utils/has-gradient-overlay.js +1 -1
- package/dist/es/chart/utils/is-date-axis.js +2 -2
- package/dist/es/chart/utils/parse-date-category.js +2 -2
- package/dist/es/chart/utils/segment-visible.js +2 -2
- package/dist/es/chart/waterfall-chart/waterfall-chart.js +41 -55
- package/dist/es/chart/waterfall-chart/waterfall-segment.js +16 -24
- package/dist/es/chart-wizard/get-wizard-data-from-data-rows.js +5 -6
- package/dist/es/chart-wizard/messages.js +1 -1
- package/dist/es/chart-wizard/state.js +145 -137
- package/dist/es/chart-wizard.js +12 -12
- package/dist/es/common/add-class.js +3 -3
- package/dist/es/common/align-path-to-pixel.js +2 -2
- package/dist/es/common/auto-text-color.js +1 -1
- package/dist/es/common/constants.js +53 -53
- package/dist/es/common/create-hash-set.js +59 -65
- package/dist/es/common/cycleDown.js +1 -1
- package/dist/es/common/deep-extend.js +10 -12
- package/dist/es/common/element-scale.js +9 -9
- package/dist/es/common/element-styles.js +8 -8
- package/dist/es/common/event-map.js +4 -4
- package/dist/es/common/event-utils.js +13 -13
- package/dist/es/common/find.js +2 -2
- package/dist/es/common/font-loader.js +42 -44
- package/dist/es/common/get-aria-template.js +2 -4
- package/dist/es/common/get-spacing.js +2 -4
- package/dist/es/common/get-supported-features.js +7 -7
- package/dist/es/common/get-template.js +2 -4
- package/dist/es/common/getter.js +5 -5
- package/dist/es/common/grep.js +3 -3
- package/dist/es/common/has-classes.js +2 -2
- package/dist/es/common/hash-map.js +11 -11
- package/dist/es/common/instance-observer.js +28 -33
- package/dist/es/common/keys.js +1 -1
- package/dist/es/common/map.js +4 -4
- package/dist/es/common/matrix.js +142 -150
- package/dist/es/common/mousewheel-delta.js +2 -2
- package/dist/es/common/observable.js +40 -52
- package/dist/es/common/remove-class.js +1 -1
- package/dist/es/common/render-icon.js +50 -60
- package/dist/es/common/set-default-options.js +1 -1
- package/dist/es/common/sparse-array-limits.js +4 -4
- package/dist/es/common/user-events.js +124 -150
- package/dist/es/core/axis-label.js +38 -43
- package/dist/es/core/axis.js +293 -345
- package/dist/es/core/box-element.js +36 -46
- package/dist/es/core/box.js +75 -83
- package/dist/es/core/category-axis.js +265 -314
- package/dist/es/core/chart-element.js +98 -109
- package/dist/es/core/constants.js +3 -3
- package/dist/es/core/curve-processor.js +86 -93
- package/dist/es/core/date-category-axis.js +381 -413
- package/dist/es/core/date-value-axis.js +108 -118
- package/dist/es/core/float-element.js +54 -78
- package/dist/es/core/gradients.js +3 -3
- package/dist/es/core/logarithmic-axis.js +134 -186
- package/dist/es/core/mixins/grid-lines-mixin.js +18 -20
- package/dist/es/core/mixins/radar-numeric-axis-mixin.js +46 -51
- package/dist/es/core/note.js +58 -73
- package/dist/es/core/numeric-axis.js +111 -133
- package/dist/es/core/pattern.js +4 -8
- package/dist/es/core/point.js +25 -34
- package/dist/es/core/polar-axis.js +73 -91
- package/dist/es/core/radar-category-axis.js +90 -114
- package/dist/es/core/radar-logarithmic-axis.js +10 -20
- package/dist/es/core/radar-numeric-axis.js +10 -20
- package/dist/es/core/ring.js +61 -68
- package/dist/es/core/root-element.js +40 -48
- package/dist/es/core/sector.js +11 -17
- package/dist/es/core/shape-builder.js +13 -23
- package/dist/es/core/shape-element.js +27 -37
- package/dist/es/core/text-box.js +50 -59
- package/dist/es/core/text.js +13 -24
- package/dist/es/core/title.js +19 -25
- package/dist/es/core/utils/auto-axis-max.js +3 -3
- package/dist/es/core/utils/auto-axis-min.js +3 -3
- package/dist/es/core/utils/auto-major-unit.js +4 -4
- package/dist/es/core/utils/box-diff.js +9 -9
- package/dist/es/core/utils/create-axis-grid-line.js +2 -4
- package/dist/es/core/utils/create-axis-tick.js +2 -4
- package/dist/es/core/utils/guid.js +3 -3
- package/dist/es/core/utils/rect-to-box.js +2 -2
- package/dist/es/date-utils/absolute-date-diff.js +2 -2
- package/dist/es/date-utils/add-duration.js +5 -5
- package/dist/es/date-utils/ceil-date.js +1 -1
- package/dist/es/date-utils/constants.js +17 -17
- package/dist/es/date-utils/date-index.js +3 -3
- package/dist/es/date-utils/duration.js +1 -1
- package/dist/es/date-utils/lte-date-index.js +4 -4
- package/dist/es/date-utils/parse-date.js +1 -1
- package/dist/es/date-utils/parse-dates.js +2 -2
- package/dist/es/date-utils/start-of-week.js +3 -5
- package/dist/es/date-utils/to-date.js +1 -1
- package/dist/es/date-utils/to-time.js +2 -2
- package/dist/es/drawing-utils.js +18 -17
- package/dist/es/gauges/arc/arc-gauge.js +29 -38
- package/dist/es/gauges/arc/arc-scale.js +16 -29
- package/dist/es/gauges/arc/range-pointer-animation.js +16 -25
- package/dist/es/gauges/arc/range-pointer.js +25 -46
- package/dist/es/gauges/circular/circular-gauge.js +7 -17
- package/dist/es/gauges/constants.js +14 -14
- package/dist/es/gauges/gauge.js +84 -96
- package/dist/es/gauges/linear/arrow-linear-pointer-animation.js +13 -25
- package/dist/es/gauges/linear/arrow-linear-pointer.js +23 -35
- package/dist/es/gauges/linear/bar-linear-pointer-animation.js +15 -24
- package/dist/es/gauges/linear/bar-linear-pointer.js +38 -51
- package/dist/es/gauges/linear/linear-gauge.js +61 -83
- package/dist/es/gauges/linear/linear-pointer.js +25 -39
- package/dist/es/gauges/linear/linear-scale.js +57 -74
- package/dist/es/gauges/pointer.js +11 -21
- package/dist/es/gauges/radial/radial-gauge.js +58 -81
- package/dist/es/gauges/radial/radial-pointer-animation.js +9 -15
- package/dist/es/gauges/radial/radial-pointer.js +33 -48
- package/dist/es/gauges/radial/radial-scale.js +154 -186
- package/dist/es/gauges/utils/build-label-element.js +10 -12
- package/dist/es/gauges/utils/get-range.js +2 -2
- package/dist/es/gauges/utils/pad.js +3 -3
- package/dist/es/gauges/utils/unpad.js +1 -1
- package/dist/es/map/attribution.js +42 -52
- package/dist/es/map/constants.js +5 -5
- package/dist/es/map/crs.js +68 -112
- package/dist/es/map/datums.js +3 -3
- package/dist/es/map/extent.js +40 -54
- package/dist/es/map/layers/bubble.js +52 -70
- package/dist/es/map/layers/layer.js +50 -56
- package/dist/es/map/layers/marker.js +109 -129
- package/dist/es/map/layers/shape.js +111 -133
- package/dist/es/map/layers/tile.js +144 -170
- package/dist/es/map/location.js +70 -78
- package/dist/es/map/map.js +261 -291
- package/dist/es/map/navigator.js +33 -39
- package/dist/es/map/scroller/draggable.js +98 -134
- package/dist/es/map/scroller/fx.js +39 -46
- package/dist/es/map/scroller/scroller.js +144 -174
- package/dist/es/map/tooltip/tooltip.js +15 -25
- package/dist/es/map/utils.js +25 -26
- package/dist/es/map/zoom.js +30 -36
- package/dist/es/qrcode/encodings/data-modes/alpha-numeric-data-mode.js +14 -26
- package/dist/es/qrcode/encodings/data-modes/byte-data-mode.js +15 -25
- package/dist/es/qrcode/encodings/data-modes/data-mode-instances.js +8 -7
- package/dist/es/qrcode/encodings/data-modes/numeric-data-mode.js +14 -24
- package/dist/es/qrcode/encodings/data-modes/qr-data-mode.js +15 -21
- package/dist/es/qrcode/encodings/encoders/iso-encoder.js +6 -16
- package/dist/es/qrcode/encodings/encoders/utf8-encoder.js +28 -36
- package/dist/es/qrcode/encodings/encoding-result.js +4 -10
- package/dist/es/qrcode/encodings/encoding.js +68 -192
- package/dist/es/qrcode/encodings/free-cell-visitor.js +16 -24
- package/dist/es/qrcode/encodings/utils/choose-mode.js +44 -0
- package/dist/es/qrcode/encodings/utils/get-data-codewords-count.js +13 -0
- package/dist/es/qrcode/encodings/utils/get-data-string.js +13 -0
- package/dist/es/qrcode/encodings/utils/get-modes.js +35 -0
- package/dist/es/qrcode/encodings/utils/get-version.js +23 -0
- package/dist/es/qrcode/encodings/utils/index.js +5 -0
- package/dist/es/qrcode/encodings/version-codewords.js +1 -1
- package/dist/es/qrcode/qrcode-validator.js +3 -5
- package/dist/es/qrcode/qrcode.js +104 -114
- package/dist/es/qrcode/utils.js +4 -4
- package/dist/es/sankey/calculation.js +286 -307
- package/dist/es/sankey/element.js +15 -23
- package/dist/es/sankey/label.js +29 -44
- package/dist/es/sankey/legend.js +15 -29
- package/dist/es/sankey/link.js +80 -98
- package/dist/es/sankey/node.js +26 -37
- package/dist/es/sankey/sankey.js +318 -385
- package/dist/es/sankey/title.js +9 -20
- package/dist/es/sankey/utils.js +18 -23
- package/dist/es/services/chart-service.js +24 -28
- package/dist/es/services/dom-events-builder.js +15 -15
- package/dist/es/services/format-service.js +30 -35
- package/dist/es/services/intl-service.js +14 -18
- package/dist/es/services/map-service.js +11 -11
- package/dist/es/services/template-service.js +9 -9
- package/dist/es/sparkline/shared-tooltip.js +11 -21
- package/dist/es/sparkline/sparkline.js +50 -60
- package/dist/es/stock/constants.js +3 -3
- package/dist/es/stock/fade-out-animation.js +12 -21
- package/dist/es/stock/navigator-hint.js +37 -49
- package/dist/es/stock/navigator.js +130 -161
- package/dist/es/stock/stock-chart.js +58 -67
- package/dist/es2015/chart/legend/legend-item.js +1 -1
- package/dist/es2015/qrcode/encodings/encoders/iso-encoder.js +1 -1
- package/dist/es2015/qrcode/encodings/encoders/utf8-encoder.js +1 -1
- package/dist/es2015/qrcode/encodings/encoding.js +3 -127
- package/dist/es2015/qrcode/encodings/utils/choose-mode.js +44 -0
- package/dist/es2015/qrcode/encodings/utils/get-data-codewords-count.js +13 -0
- package/dist/es2015/qrcode/encodings/utils/get-data-string.js +13 -0
- package/dist/es2015/qrcode/encodings/utils/get-modes.js +35 -0
- package/dist/es2015/qrcode/encodings/utils/get-version.js +23 -0
- package/dist/es2015/qrcode/encodings/utils/index.js +5 -0
- package/dist/npm/main.js +3222 -3589
- package/dist/systemjs/kendo-charts.js +1 -1
- package/package.json +19 -57
|
@@ -3,16 +3,18 @@ import checkAllPositive from './check-all-positive';
|
|
|
3
3
|
import getTrendlineData from './get-trendline-data';
|
|
4
4
|
|
|
5
5
|
function exponentialTrendline(context) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const {
|
|
7
|
+
options,
|
|
8
|
+
categoryAxis,
|
|
9
|
+
seriesValues
|
|
10
|
+
} = context;
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
const data = getData({ seriesValues, categoryAxis, options });
|
|
11
13
|
if (data) {
|
|
12
14
|
return Object.assign({}, options,
|
|
13
15
|
|
|
14
16
|
{type: 'line',
|
|
15
|
-
data
|
|
17
|
+
data,
|
|
16
18
|
categoryField: 'category',
|
|
17
19
|
field: 'value'});
|
|
18
20
|
}
|
|
@@ -20,34 +22,23 @@ function exponentialTrendline(context) {
|
|
|
20
22
|
return null;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var valueFields = ref.valueFields;
|
|
25
|
+
const valueGetter = fieldName => ({ categoryIx, valueFields }) =>
|
|
26
|
+
({ xValue: categoryIx + 1, yValue: Math.log(valueFields[fieldName]) });
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
function getData(ref) {
|
|
31
|
-
var seriesValues = ref.seriesValues;
|
|
32
|
-
var categoryAxis = ref.categoryAxis;
|
|
33
|
-
var options = ref.options;
|
|
34
|
-
|
|
35
|
-
var sourceValues = seriesValues();
|
|
28
|
+
function getData({ seriesValues, categoryAxis, options }) {
|
|
29
|
+
const sourceValues = seriesValues();
|
|
36
30
|
if (!checkAllPositive(sourceValues, options.field)) {
|
|
37
31
|
return null;
|
|
38
32
|
}
|
|
39
33
|
|
|
40
|
-
|
|
41
|
-
var slope = ref$1.slope;
|
|
42
|
-
var intercept = ref$1.intercept;
|
|
43
|
-
var count = ref$1.count;
|
|
34
|
+
let { slope, intercept, count } = calculateSlope(sourceValues, valueGetter(options.field));
|
|
44
35
|
if (count > 0) {
|
|
45
36
|
// Exponential trendline equation:
|
|
46
37
|
// y = a * e ^ (b * x)
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const a = Math.exp(intercept);
|
|
39
|
+
const b = slope;
|
|
49
40
|
|
|
50
|
-
return getTrendlineData(
|
|
41
|
+
return getTrendlineData(x => a * Math.exp(b * x), categoryAxis);
|
|
51
42
|
}
|
|
52
43
|
|
|
53
44
|
return null;
|
|
@@ -2,11 +2,10 @@ import autoMajorUnit from '../../core/utils/auto-major-unit';
|
|
|
2
2
|
import { valueOrDefault } from '../../common';
|
|
3
3
|
|
|
4
4
|
function getScatterTrendlineData(valueMapper, range, options) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var xMax = range.xMax;
|
|
5
|
+
const data = [];
|
|
6
|
+
let { xMin, xMax } = range;
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
const forecast = (options || {}).forecast;
|
|
10
9
|
if (forecast) {
|
|
11
10
|
if (forecast.before > 0) {
|
|
12
11
|
xMin -= forecast.before;
|
|
@@ -17,13 +16,13 @@ function getScatterTrendlineData(valueMapper, range, options) {
|
|
|
17
16
|
}
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
const samplingInterval = (options || {}).samplingInterval;
|
|
20
|
+
let delta = valueOrDefault(samplingInterval, autoMajorUnit(xMin, xMax) / 10);
|
|
22
21
|
if (samplingInterval <= 0) {
|
|
23
22
|
delta = xMax - xMin;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
for (
|
|
25
|
+
for (let x = xMin; x <= xMax; x += delta) {
|
|
27
26
|
data.push([
|
|
28
27
|
x,
|
|
29
28
|
valueMapper(x)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
function getTrendlineData(valueMapper, categoryAxis) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
const data = [];
|
|
3
|
+
const totalRange = categoryAxis.totalRangeIndices();
|
|
4
|
+
const currentRange = categoryAxis.currentRangeIndices();
|
|
5
|
+
const range = {
|
|
6
6
|
min: Math.floor(Math.max(currentRange.min - 1, totalRange.min)),
|
|
7
7
|
max: Math.ceil(Math.min(currentRange.max + 2, totalRange.max))
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
for (
|
|
11
|
-
|
|
10
|
+
for (let i = range.min; i < range.max; i++) {
|
|
11
|
+
const x = (i + 1);
|
|
12
12
|
data[i] = {
|
|
13
13
|
category: categoryAxis.categoryAt(i, true),
|
|
14
14
|
value: valueMapper(x)
|
|
@@ -2,16 +2,18 @@ import calculateSlope from './calculate-slope';
|
|
|
2
2
|
import getTrendlineData from './get-trendline-data';
|
|
3
3
|
|
|
4
4
|
function linearTrendline(context) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const {
|
|
6
|
+
options,
|
|
7
|
+
categoryAxis,
|
|
8
|
+
seriesValues
|
|
9
|
+
} = context;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
const data = getData({ seriesValues, categoryAxis, options });
|
|
10
12
|
if (data) {
|
|
11
13
|
return Object.assign({}, options,
|
|
12
14
|
|
|
13
15
|
{type: 'line',
|
|
14
|
-
data
|
|
16
|
+
data,
|
|
15
17
|
categoryField: 'category',
|
|
16
18
|
field: 'value'});
|
|
17
19
|
}
|
|
@@ -19,25 +21,14 @@ function linearTrendline(context) {
|
|
|
19
21
|
return null;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var valueFields = ref.valueFields;
|
|
24
|
+
const valueGetter = fieldName => ({ categoryIx, valueFields }) =>
|
|
25
|
+
({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function getData(ref) {
|
|
30
|
-
var seriesValues = ref.seriesValues;
|
|
31
|
-
var categoryAxis = ref.categoryAxis;
|
|
32
|
-
var options = ref.options;
|
|
33
|
-
|
|
34
|
-
var ref$1 = calculateSlope(seriesValues(), valueGetter(options.field));
|
|
35
|
-
var slope = ref$1.slope;
|
|
36
|
-
var intercept = ref$1.intercept;
|
|
37
|
-
var count = ref$1.count;
|
|
27
|
+
function getData({ seriesValues, categoryAxis, options }) {
|
|
28
|
+
const { slope, intercept, count } = calculateSlope(seriesValues(), valueGetter(options.field));
|
|
38
29
|
|
|
39
30
|
if (count > 0) {
|
|
40
|
-
return getTrendlineData(
|
|
31
|
+
return getTrendlineData(x => slope * x + intercept, categoryAxis);
|
|
41
32
|
}
|
|
42
33
|
|
|
43
34
|
return null;
|
|
@@ -2,16 +2,18 @@ import calculateSlope from './calculate-slope';
|
|
|
2
2
|
import getTrendlineData from './get-trendline-data';
|
|
3
3
|
|
|
4
4
|
function logarithmicTrendline(context) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const {
|
|
6
|
+
options,
|
|
7
|
+
categoryAxis,
|
|
8
|
+
seriesValues
|
|
9
|
+
} = context;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
const data = getData({ seriesValues, categoryAxis, options });
|
|
10
12
|
if (data) {
|
|
11
13
|
return Object.assign({}, options,
|
|
12
14
|
|
|
13
15
|
{type: 'line',
|
|
14
|
-
data
|
|
16
|
+
data,
|
|
15
17
|
categoryField: 'category',
|
|
16
18
|
field: 'value'});
|
|
17
19
|
}
|
|
@@ -19,28 +21,17 @@ function logarithmicTrendline(context) {
|
|
|
19
21
|
return null;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var valueFields = ref.valueFields;
|
|
24
|
+
const valueGetter = fieldName => ({ categoryIx, valueFields }) =>
|
|
25
|
+
({ xValue: Math.log(categoryIx + 1), yValue: valueFields[fieldName] });
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function getData(ref) {
|
|
30
|
-
var seriesValues = ref.seriesValues;
|
|
31
|
-
var categoryAxis = ref.categoryAxis;
|
|
32
|
-
var options = ref.options;
|
|
33
|
-
|
|
34
|
-
var ref$1 = calculateSlope(seriesValues(), valueGetter(options.field));
|
|
35
|
-
var slope = ref$1.slope;
|
|
36
|
-
var intercept = ref$1.intercept;
|
|
37
|
-
var count = ref$1.count;
|
|
27
|
+
function getData({ seriesValues, categoryAxis, options }) {
|
|
28
|
+
let { slope, intercept, count } = calculateSlope(seriesValues(), valueGetter(options.field));
|
|
38
29
|
if (count > 0) {
|
|
39
30
|
// Logarithmic trendline equation:
|
|
40
31
|
// y = a * ln (x) + b
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return getTrendlineData(
|
|
32
|
+
const a = slope;
|
|
33
|
+
const b = intercept;
|
|
34
|
+
return getTrendlineData(x => a * Math.log(x) + b, categoryAxis);
|
|
44
35
|
}
|
|
45
36
|
|
|
46
37
|
return null;
|
|
@@ -2,14 +2,14 @@ import { MIN_MOVING_AVERAGE_PERIOD } from '../constants';
|
|
|
2
2
|
import calculateMovingAverage from './calculate-moving-average';
|
|
3
3
|
|
|
4
4
|
function movingAverageTrendline(context) {
|
|
5
|
-
|
|
5
|
+
const { options } = context;
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const data = getData(context);
|
|
8
8
|
if (data) {
|
|
9
9
|
return Object.assign({}, options,
|
|
10
10
|
|
|
11
11
|
{type: 'line',
|
|
12
|
-
data
|
|
12
|
+
data,
|
|
13
13
|
categoryField: 'category',
|
|
14
14
|
field: 'value'});
|
|
15
15
|
}
|
|
@@ -17,22 +17,14 @@ function movingAverageTrendline(context) {
|
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var valueFields = ref.valueFields;
|
|
20
|
+
const valueGetter = fieldName => ({ categoryIx, valueFields }) =>
|
|
21
|
+
({ xValue: categoryIx, yValue: valueFields[fieldName] });
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
var categoryAxis = ref.categoryAxis;
|
|
30
|
-
var seriesValues = ref.seriesValues;
|
|
31
|
-
|
|
32
|
-
var period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;
|
|
33
|
-
var totalRange = categoryAxis.totalRangeIndices();
|
|
34
|
-
var currentRange = categoryAxis.currentRangeIndices();
|
|
35
|
-
var range = {
|
|
23
|
+
function calculatePoints({ options, categoryAxis, seriesValues }) {
|
|
24
|
+
const period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;
|
|
25
|
+
const totalRange = categoryAxis.totalRangeIndices();
|
|
26
|
+
const currentRange = categoryAxis.currentRangeIndices();
|
|
27
|
+
const range = {
|
|
36
28
|
min: Math.floor(Math.max(currentRange.min - period, totalRange.min)),
|
|
37
29
|
max: Math.ceil(Math.min(currentRange.max + period + 2, totalRange.max))
|
|
38
30
|
};
|
|
@@ -41,16 +33,13 @@ function calculatePoints(ref) {
|
|
|
41
33
|
}
|
|
42
34
|
|
|
43
35
|
function getData(context) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
points.forEach(
|
|
48
|
-
var categoryIx = ref[0];
|
|
49
|
-
var value = ref[1];
|
|
50
|
-
|
|
36
|
+
const { categoryAxis } = context;
|
|
37
|
+
const points = calculatePoints(context);
|
|
38
|
+
const data = [];
|
|
39
|
+
points.forEach(([categoryIx, value]) => {
|
|
51
40
|
data[categoryIx] = {
|
|
52
41
|
category: categoryAxis.categoryAt(categoryIx, true),
|
|
53
|
-
value
|
|
42
|
+
value
|
|
54
43
|
};
|
|
55
44
|
});
|
|
56
45
|
|
|
@@ -2,16 +2,18 @@ import getTrendlineData from './get-trendline-data';
|
|
|
2
2
|
import calculatePolynomial from './calculate-polynomial';
|
|
3
3
|
|
|
4
4
|
function polynomialTrendline(context) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const {
|
|
6
|
+
options,
|
|
7
|
+
categoryAxis,
|
|
8
|
+
seriesValues
|
|
9
|
+
} = context;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
const data = getData({ seriesValues, categoryAxis, options });
|
|
10
12
|
if (data) {
|
|
11
13
|
return Object.assign({}, options,
|
|
12
14
|
|
|
13
15
|
{type: 'line',
|
|
14
|
-
data
|
|
16
|
+
data,
|
|
15
17
|
categoryField: 'category',
|
|
16
18
|
field: 'value'});
|
|
17
19
|
}
|
|
@@ -19,28 +21,18 @@ function polynomialTrendline(context) {
|
|
|
19
21
|
return null;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var valueFields = ref.valueFields;
|
|
24
|
+
const valueGetter = fieldName => ({ categoryIx, valueFields }) =>
|
|
25
|
+
({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function getData(ref) {
|
|
30
|
-
var seriesValues = ref.seriesValues;
|
|
31
|
-
var categoryAxis = ref.categoryAxis;
|
|
32
|
-
var options = ref.options;
|
|
33
|
-
|
|
34
|
-
var order = (options.trendline || {}).order;
|
|
35
|
-
var ref$1 = calculatePolynomial(seriesValues(), valueGetter(options.field), order);
|
|
36
|
-
var count = ref$1.count;
|
|
37
|
-
var valueMapper = ref$1.valueMapper;
|
|
27
|
+
function getData({ seriesValues, categoryAxis, options }) {
|
|
28
|
+
const order = (options.trendline || {}).order;
|
|
29
|
+
const { count, valueMapper } = calculatePolynomial(seriesValues(), valueGetter(options.field), order);
|
|
38
30
|
|
|
39
31
|
if (count > 0) {
|
|
40
32
|
// Polynomial trendline equation:
|
|
41
33
|
// y = aN * x^N + ... + a2 * x^2 + a1 * x + a0
|
|
42
34
|
|
|
43
|
-
return getTrendlineData(
|
|
35
|
+
return getTrendlineData(x => valueMapper(x), categoryAxis);
|
|
44
36
|
}
|
|
45
37
|
|
|
46
38
|
return null;
|
|
@@ -3,16 +3,18 @@ import checkAllPositive from './check-all-positive';
|
|
|
3
3
|
import getTrendlineData from './get-trendline-data';
|
|
4
4
|
|
|
5
5
|
function powerTrendline(context) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const {
|
|
7
|
+
options,
|
|
8
|
+
categoryAxis,
|
|
9
|
+
seriesValues
|
|
10
|
+
} = context;
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
const data = getData({ seriesValues, categoryAxis, options });
|
|
11
13
|
if (data) {
|
|
12
14
|
return Object.assign({}, options,
|
|
13
15
|
|
|
14
16
|
{type: 'line',
|
|
15
|
-
data
|
|
17
|
+
data,
|
|
16
18
|
categoryField: 'category',
|
|
17
19
|
field: 'value'});
|
|
18
20
|
}
|
|
@@ -20,34 +22,23 @@ function powerTrendline(context) {
|
|
|
20
22
|
return null;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var valueFields = ref.valueFields;
|
|
25
|
+
const valueGetter = fieldName => ({ categoryIx, valueFields }) =>
|
|
26
|
+
({ xValue: Math.log(categoryIx + 1), yValue: Math.log(valueFields[fieldName]) });
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
function getData(ref) {
|
|
31
|
-
var seriesValues = ref.seriesValues;
|
|
32
|
-
var categoryAxis = ref.categoryAxis;
|
|
33
|
-
var options = ref.options;
|
|
34
|
-
|
|
35
|
-
var sourceValues = seriesValues();
|
|
28
|
+
function getData({ seriesValues, categoryAxis, options }) {
|
|
29
|
+
const sourceValues = seriesValues();
|
|
36
30
|
if (!checkAllPositive(sourceValues, options.field)) {
|
|
37
31
|
return null;
|
|
38
32
|
}
|
|
39
33
|
|
|
40
|
-
|
|
41
|
-
var slope = ref$1.slope;
|
|
42
|
-
var intercept = ref$1.intercept;
|
|
43
|
-
var count = ref$1.count;
|
|
34
|
+
let { slope, intercept, count } = calculateSlope(sourceValues, valueGetter(options.field));
|
|
44
35
|
if (count > 0) {
|
|
45
36
|
// Power trendline equation:
|
|
46
37
|
// y = a * x ^ b
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const a = Math.exp(intercept);
|
|
39
|
+
const b = slope;
|
|
49
40
|
|
|
50
|
-
return getTrendlineData(
|
|
41
|
+
return getTrendlineData(x => a * Math.pow(x, b), categoryAxis);
|
|
51
42
|
}
|
|
52
43
|
|
|
53
44
|
return null;
|
|
@@ -3,50 +3,41 @@ import checkAllPositive from './check-all-positive';
|
|
|
3
3
|
import getScatterTrendlineData from './get-scatter-trendline-data';
|
|
4
4
|
|
|
5
5
|
function scatterExponentialTrendline(context) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const {
|
|
7
|
+
options,
|
|
8
|
+
seriesValues
|
|
9
|
+
} = context;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
const data = getData({ seriesValues, options });
|
|
10
12
|
if (data) {
|
|
11
13
|
return Object.assign({}, options,
|
|
12
14
|
|
|
13
15
|
{type: 'scatterLine',
|
|
14
|
-
data
|
|
16
|
+
data});
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
return null;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
const valueGetter = fieldName => ({ valueFields }) =>
|
|
23
|
+
({ xValue: valueFields.x, yValue: Math.log(valueFields[fieldName]) });
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
function getData(ref) {
|
|
27
|
-
var seriesValues = ref.seriesValues;
|
|
28
|
-
var options = ref.options;
|
|
29
|
-
|
|
30
|
-
var sourceValues = seriesValues();
|
|
25
|
+
function getData({ seriesValues, options }) {
|
|
26
|
+
const sourceValues = seriesValues();
|
|
31
27
|
if (!checkAllPositive(sourceValues, options.field)) {
|
|
32
28
|
return null;
|
|
33
29
|
}
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
var intercept = ref$1.intercept;
|
|
38
|
-
var count = ref$1.count;
|
|
39
|
-
var xMin = ref$1.xMin;
|
|
40
|
-
var xMax = ref$1.xMax;
|
|
41
|
-
var range = { xMin: xMin, xMax: xMax };
|
|
31
|
+
let { slope, intercept, count, xMin, xMax } = calculateSlope(sourceValues, valueGetter(options.field));
|
|
32
|
+
const range = { xMin, xMax };
|
|
42
33
|
|
|
43
34
|
if (count > 0) {
|
|
44
35
|
// Exponential trendline equation:
|
|
45
36
|
// y = a * e ^ (b * x)
|
|
46
|
-
|
|
47
|
-
|
|
37
|
+
const a = Math.exp(intercept);
|
|
38
|
+
const b = slope;
|
|
48
39
|
|
|
49
|
-
return getScatterTrendlineData(
|
|
40
|
+
return getScatterTrendlineData(x => a * Math.exp(b * x), range, options.trendline);
|
|
50
41
|
}
|
|
51
42
|
|
|
52
43
|
return null;
|
|
@@ -3,34 +3,28 @@ import getScatterTrendlineData from './get-scatter-trendline-data';
|
|
|
3
3
|
import scatterValueGetter from './scatter-value-getter';
|
|
4
4
|
|
|
5
5
|
function scatterLinearTrendline(context) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const {
|
|
7
|
+
options,
|
|
8
|
+
seriesValues
|
|
9
|
+
} = context;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
const data = getData({ seriesValues, options });
|
|
10
12
|
if (data) {
|
|
11
13
|
return Object.assign({}, options,
|
|
12
14
|
|
|
13
15
|
{type: 'scatterLine',
|
|
14
|
-
data
|
|
16
|
+
data});
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
return null;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
function getData(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var ref$1 = calculateSlope(seriesValues(), scatterValueGetter(options.field));
|
|
25
|
-
var slope = ref$1.slope;
|
|
26
|
-
var intercept = ref$1.intercept;
|
|
27
|
-
var count = ref$1.count;
|
|
28
|
-
var xMin = ref$1.xMin;
|
|
29
|
-
var xMax = ref$1.xMax;
|
|
30
|
-
var range = { xMin: xMin, xMax: xMax };
|
|
22
|
+
function getData({ seriesValues, options }) {
|
|
23
|
+
let { slope, intercept, count, xMin, xMax } = calculateSlope(seriesValues(), scatterValueGetter(options.field));
|
|
24
|
+
const range = { xMin, xMax };
|
|
31
25
|
|
|
32
26
|
if (count > 0) {
|
|
33
|
-
return getScatterTrendlineData(
|
|
27
|
+
return getScatterTrendlineData(x => slope * x + intercept, range, options.trendline);
|
|
34
28
|
}
|
|
35
29
|
|
|
36
30
|
return null;
|
|
@@ -4,54 +4,44 @@ import getScatterTrendlineData from './get-scatter-trendline-data';
|
|
|
4
4
|
import xValueLimits from './x-value-limits';
|
|
5
5
|
|
|
6
6
|
function scatterLogarithmicTrendline(context) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const {
|
|
8
|
+
options,
|
|
9
|
+
seriesValues
|
|
10
|
+
} = context;
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
const data = getData({ seriesValues, options });
|
|
11
13
|
if (data) {
|
|
12
14
|
return Object.assign({}, options,
|
|
13
15
|
|
|
14
16
|
{type: 'scatterLine',
|
|
15
|
-
data
|
|
17
|
+
data});
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
return null;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
const valueGetter = fieldName => ({ valueFields }) =>
|
|
24
|
+
({ xValue: valueFields.x, yValue: valueFields[fieldName] });
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
const logValueGetter = fieldName => ({ valueFields }) =>
|
|
27
|
+
({ xValue: Math.log(valueFields.x), yValue: valueFields[fieldName] });
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return ({ xValue: Math.log(valueFields.x), yValue: valueFields[fieldName] });
|
|
31
|
-
; } };
|
|
32
|
-
|
|
33
|
-
function getData(ref) {
|
|
34
|
-
var seriesValues = ref.seriesValues;
|
|
35
|
-
var options = ref.options;
|
|
36
|
-
|
|
37
|
-
var sourceValues = seriesValues();
|
|
29
|
+
function getData({ seriesValues, options }) {
|
|
30
|
+
const sourceValues = seriesValues();
|
|
38
31
|
if (!checkAllPositive(sourceValues, 'x')) {
|
|
39
32
|
return null;
|
|
40
33
|
}
|
|
41
34
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
var intercept = ref$1.intercept;
|
|
45
|
-
var count = ref$1.count;
|
|
46
|
-
var range = xValueLimits(sourceValues, valueGetter(options.field));
|
|
35
|
+
let { slope, intercept, count } = calculateSlope(sourceValues, logValueGetter(options.field));
|
|
36
|
+
let range = xValueLimits(sourceValues, valueGetter(options.field));
|
|
47
37
|
|
|
48
38
|
if (count > 0) {
|
|
49
39
|
// Logarithmic trendline equation:
|
|
50
40
|
// y = a * ln (x) + b
|
|
51
|
-
|
|
52
|
-
|
|
41
|
+
const a = slope;
|
|
42
|
+
const b = intercept;
|
|
53
43
|
|
|
54
|
-
return getScatterTrendlineData(
|
|
44
|
+
return getScatterTrendlineData(x => a * Math.log(x) + b, range, options.trendline);
|
|
55
45
|
}
|
|
56
46
|
|
|
57
47
|
return null;
|
|
@@ -3,26 +3,23 @@ import { MIN_MOVING_AVERAGE_PERIOD } from '../constants';
|
|
|
3
3
|
import scatterValueGetter from './scatter-value-getter';
|
|
4
4
|
|
|
5
5
|
function scatterMovingAverageTrendline(context) {
|
|
6
|
-
|
|
6
|
+
const { options } = context;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
const data = getData(context);
|
|
9
9
|
if (data) {
|
|
10
10
|
return Object.assign({}, options,
|
|
11
11
|
|
|
12
12
|
{type: 'scatterLine',
|
|
13
|
-
data
|
|
13
|
+
data});
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
function getData(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
var period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;
|
|
24
|
-
var range = { before: period, after: period };
|
|
25
|
-
var data = calculateMovingAverage(seriesValues(range), scatterValueGetter(options.field), period);
|
|
19
|
+
function getData({ options, seriesValues }) {
|
|
20
|
+
const period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;
|
|
21
|
+
const range = { before: period, after: period };
|
|
22
|
+
const data = calculateMovingAverage(seriesValues(range), scatterValueGetter(options.field), period);
|
|
26
23
|
|
|
27
24
|
if (data.length > 0) {
|
|
28
25
|
return data;
|