@milaboratories/miplots4 1.0.129 → 1.0.131
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/DataFrame.d.ts +15 -9
- package/dist/DataFrame.d.ts.map +1 -1
- package/dist/DataFrame.js +105 -81
- package/dist/DataFrame.js.map +1 -1
- package/dist/bubble/ChartRenderer.d.ts +6 -5
- package/dist/bubble/ChartRenderer.d.ts.map +1 -1
- package/dist/bubble/ChartRenderer.js +123 -121
- package/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/bubble/components/Chart.d.ts +3 -2
- package/dist/bubble/components/Chart.d.ts.map +1 -1
- package/dist/bubble/components/Chart.js +78 -97
- package/dist/bubble/components/Chart.js.map +1 -1
- package/dist/bubble/components/ChartsGroup.d.ts +6 -5
- package/dist/bubble/components/ChartsGroup.d.ts.map +1 -1
- package/dist/bubble/components/ChartsGroup.js +39 -37
- package/dist/bubble/components/ChartsGroup.js.map +1 -1
- package/dist/bubble/getCellTooltip.d.ts +5 -0
- package/dist/bubble/getCellTooltip.d.ts.map +1 -0
- package/dist/bubble/getCellTooltip.js +28 -0
- package/dist/bubble/getCellTooltip.js.map +1 -0
- package/dist/bubble/{getCells.d.ts → getGroupedCellsData.d.ts} +4 -4
- package/dist/bubble/getGroupedCellsData.d.ts.map +1 -0
- package/dist/bubble/getGroupedCellsData.js +94 -0
- package/dist/bubble/getGroupedCellsData.js.map +1 -0
- package/dist/bubble/index.d.ts +4 -4
- package/dist/bubble/index.d.ts.map +1 -1
- package/dist/bubble/index.js +47 -42
- package/dist/bubble/index.js.map +1 -1
- package/dist/bubble/utils/calculateCaptionTails.d.ts +2 -2
- package/dist/bubble/utils/calculateCaptionTails.d.ts.map +1 -1
- package/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
- package/dist/common/Legend.d.ts.map +1 -1
- package/dist/common/Legend.js.map +1 -1
- package/dist/common/Tooltip.js +1 -1
- package/dist/common/Tooltip.js.map +1 -1
- package/dist/common/types.d.ts +1 -1
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/useDataFrame.d.ts +11 -0
- package/dist/common/useDataFrame.d.ts.map +1 -0
- package/dist/common/useDataFrame.js +20 -0
- package/dist/common/useDataFrame.js.map +1 -0
- package/dist/dendro/ChartRenderer.d.ts +9 -8
- package/dist/dendro/ChartRenderer.d.ts.map +1 -1
- package/dist/dendro/ChartRenderer.js +187 -187
- package/dist/dendro/ChartRenderer.js.map +1 -1
- package/dist/dendro/components/Chart.d.ts +8 -8
- package/dist/dendro/components/Chart.d.ts.map +1 -1
- package/dist/dendro/components/Chart.js +35 -35
- package/dist/dendro/components/Chart.js.map +1 -1
- package/dist/dendro/components/Heatmap.d.ts +3 -3
- package/dist/dendro/components/Heatmap.d.ts.map +1 -1
- package/dist/dendro/components/Heatmap.js +23 -23
- package/dist/dendro/components/Heatmap.js.map +1 -1
- package/dist/dendro/components/Legend.d.ts.map +1 -1
- package/dist/dendro/components/Legend.js.map +1 -1
- package/dist/dendro/components/LinksGroup.d.ts +6 -6
- package/dist/dendro/components/LinksGroup.d.ts.map +1 -1
- package/dist/dendro/components/LinksGroup.js +17 -17
- package/dist/dendro/components/LinksGroup.js.map +1 -1
- package/dist/dendro/components/NodesGroup.d.ts +7 -7
- package/dist/dendro/components/NodesGroup.d.ts.map +1 -1
- package/dist/dendro/components/NodesGroup.js +29 -29
- package/dist/dendro/components/NodesGroup.js.map +1 -1
- package/dist/dendro/components/types.d.ts +2 -2
- package/dist/dendro/components/types.d.ts.map +1 -1
- package/dist/dendro/getHeatmapData.d.ts +2 -2
- package/dist/dendro/getHeatmapData.d.ts.map +1 -1
- package/dist/dendro/getHeatmapData.js +48 -44
- package/dist/dendro/getHeatmapData.js.map +1 -1
- package/dist/dendro/getHierarchyData.d.ts +3 -3
- package/dist/dendro/getHierarchyData.d.ts.map +1 -1
- package/dist/dendro/getHierarchyData.js +31 -31
- package/dist/dendro/getHierarchyData.js.map +1 -1
- package/dist/dendro/index.d.ts +5 -5
- package/dist/dendro/index.d.ts.map +1 -1
- package/dist/dendro/index.js +86 -89
- package/dist/dendro/index.js.map +1 -1
- package/dist/discrete/ChartRenderer.d.ts +6 -6
- package/dist/discrete/ChartRenderer.d.ts.map +1 -1
- package/dist/discrete/ChartRenderer.js +197 -196
- package/dist/discrete/ChartRenderer.js.map +1 -1
- package/dist/discrete/DiscreteSettingsImpl.d.ts +3 -3
- package/dist/discrete/DiscreteSettingsImpl.d.ts.map +1 -1
- package/dist/discrete/DiscreteSettingsImpl.js +8 -8
- package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
- package/dist/discrete/components/layers/BoxElement.js.map +1 -1
- package/dist/discrete/index.d.ts +1 -1
- package/dist/discrete/index.d.ts.map +1 -1
- package/dist/discrete/index.js +109 -106
- package/dist/discrete/index.js.map +1 -1
- package/dist/discrete/layers/bar.d.ts +2 -2
- package/dist/discrete/layers/bar.d.ts.map +1 -1
- package/dist/discrete/layers/bar.js +32 -37
- package/dist/discrete/layers/bar.js.map +1 -1
- package/dist/discrete/layers/binnedDots.d.ts +3 -3
- package/dist/discrete/layers/binnedDots.d.ts.map +1 -1
- package/dist/discrete/layers/binnedDots.js +66 -78
- package/dist/discrete/layers/binnedDots.js.map +1 -1
- package/dist/discrete/layers/boxes.d.ts +3 -4
- package/dist/discrete/layers/boxes.d.ts.map +1 -1
- package/dist/discrete/layers/boxes.js +59 -60
- package/dist/discrete/layers/boxes.js.map +1 -1
- package/dist/discrete/layers/dots.d.ts +2 -3
- package/dist/discrete/layers/dots.d.ts.map +1 -1
- package/dist/discrete/layers/dots.js +30 -30
- package/dist/discrete/layers/dots.js.map +1 -1
- package/dist/discrete/layers/lines.js +11 -10
- package/dist/discrete/layers/lines.js.map +1 -1
- package/dist/discrete/layers/logo.d.ts +2 -2
- package/dist/discrete/layers/logo.d.ts.map +1 -1
- package/dist/discrete/layers/logo.js +21 -21
- package/dist/discrete/layers/logo.js.map +1 -1
- package/dist/discrete/layers/pairedPoints.d.ts +2 -2
- package/dist/discrete/layers/pairedPoints.d.ts.map +1 -1
- package/dist/discrete/layers/pairedPoints.js +62 -62
- package/dist/discrete/layers/pairedPoints.js.map +1 -1
- package/dist/discrete/layers/sina.d.ts +3 -4
- package/dist/discrete/layers/sina.d.ts.map +1 -1
- package/dist/discrete/layers/sina.js +67 -71
- package/dist/discrete/layers/sina.js.map +1 -1
- package/dist/discrete/layers/stackedBar.d.ts +1 -1
- package/dist/discrete/layers/stackedBar.d.ts.map +1 -1
- package/dist/discrete/layers/stackedBar.js +25 -25
- package/dist/discrete/layers/stackedBar.js.map +1 -1
- package/dist/discrete/layers/violins.js +13 -13
- package/dist/discrete/utils/getOutliersBounds.d.ts +1 -1
- package/dist/discrete/utils/getOutliersBounds.d.ts.map +1 -1
- package/dist/discrete/utils/getOutliersBounds.js +5 -5
- package/dist/discrete/utils/getOutliersBounds.js.map +1 -1
- package/dist/discrete/utils/splitTextByWidth.js +1 -1
- package/dist/discrete/utils/splitTextByWidth.js.map +1 -1
- package/dist/heatmap/ChartRenderer.d.ts +7 -6
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +232 -230
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.d.ts +2 -2
- package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.js +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.js +40 -39
- package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
- package/dist/heatmap/components/Chart.d.ts.map +1 -1
- package/dist/heatmap/components/Chart.js +90 -89
- package/dist/heatmap/components/Chart.js.map +1 -1
- package/dist/heatmap/components/ChartsGroup.d.ts +2 -2
- package/dist/heatmap/components/ChartsGroup.d.ts.map +1 -1
- package/dist/heatmap/components/ChartsGroup.js +14 -14
- package/dist/heatmap/components/ChartsGroup.js.map +1 -1
- package/dist/heatmap/components/types.d.ts +3 -2
- package/dist/heatmap/components/types.d.ts.map +1 -1
- package/dist/heatmap/getCells.d.ts +3 -2
- package/dist/heatmap/getCells.d.ts.map +1 -1
- package/dist/heatmap/getCells.js +97 -93
- package/dist/heatmap/getCells.js.map +1 -1
- package/dist/heatmap/index.d.ts +3 -3
- package/dist/heatmap/index.d.ts.map +1 -1
- package/dist/heatmap/index.js +13 -12
- package/dist/heatmap/index.js.map +1 -1
- package/dist/heatmap/utils/calculateAnnotationTitleSizes.d.ts.map +1 -1
- package/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
- package/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
- package/dist/heatmap/utils/calculateCaptionTails.d.ts +1 -1
- package/dist/heatmap/utils/calculateCaptionTails.d.ts.map +1 -1
- package/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
- package/dist/histogram/ChartRenderer.d.ts +6 -5
- package/dist/histogram/ChartRenderer.d.ts.map +1 -1
- package/dist/histogram/ChartRenderer.js +154 -153
- package/dist/histogram/ChartRenderer.js.map +1 -1
- package/dist/histogram/HistogramSettingsImpl.d.ts +2 -2
- package/dist/histogram/HistogramSettingsImpl.d.ts.map +1 -1
- package/dist/histogram/HistogramSettingsImpl.js.map +1 -1
- package/dist/histogram/components/Chart.js +48 -48
- package/dist/histogram/components/Chart.js.map +1 -1
- package/dist/histogram/components/types.d.ts +4 -3
- package/dist/histogram/components/types.d.ts.map +1 -1
- package/dist/histogram/getHistogramData.d.ts +7 -7
- package/dist/histogram/getHistogramData.d.ts.map +1 -1
- package/dist/histogram/getHistogramData.js +52 -53
- package/dist/histogram/getHistogramData.js.map +1 -1
- package/dist/histogram/index.d.ts +3 -3
- package/dist/histogram/index.d.ts.map +1 -1
- package/dist/histogram/index.js +49 -45
- package/dist/histogram/index.js.map +1 -1
- package/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +10 -10
- package/dist/node_modules/d3-array/src/min.js +5 -11
- package/dist/node_modules/d3-array/src/min.js.map +1 -1
- package/dist/node_modules/d3-shape/src/area.js +30 -30
- package/dist/node_modules/d3-shape/src/line.js +6 -6
- package/dist/node_modules/d3-shape/src/line.js.map +1 -1
- package/dist/node_modules/kdbush/index.js +148 -0
- package/dist/node_modules/kdbush/index.js.map +1 -0
- package/dist/scatterplot/ChartRenderer.d.ts +7 -6
- package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot/ChartRenderer.js +213 -209
- package/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +2 -2
- package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.js +28 -28
- package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartAxisTitles.js +31 -30
- package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
- package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartLayersData.js +138 -156
- package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
- package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartTooltip.js +41 -38
- package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/scatterplot/components/ChartTrendsData.js +21 -21
- package/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
- package/dist/scatterplot/components/types.d.ts +7 -7
- package/dist/scatterplot/components/types.d.ts.map +1 -1
- package/dist/scatterplot/constants.d.ts +1 -1
- package/dist/scatterplot/constants.d.ts.map +1 -1
- package/dist/scatterplot/constants.js.map +1 -1
- package/dist/scatterplot/dots.d.ts +2 -2
- package/dist/scatterplot/dots.d.ts.map +1 -1
- package/dist/scatterplot/dots.js +27 -25
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot/getLayersData.d.ts +3 -3
- package/dist/scatterplot/getLayersData.d.ts.map +1 -1
- package/dist/scatterplot/getLayersData.js +12 -15
- package/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/scatterplot/index.d.ts +4 -4
- package/dist/scatterplot/index.d.ts.map +1 -1
- package/dist/scatterplot/index.js +71 -72
- package/dist/scatterplot/index.js.map +1 -1
- package/dist/scatterplot/linearRegression.d.ts +5 -4
- package/dist/scatterplot/linearRegression.d.ts.map +1 -1
- package/dist/scatterplot/linearRegression.js +88 -86
- package/dist/scatterplot/linearRegression.js.map +1 -1
- package/dist/scatterplot/utils/createAesGetter.d.ts +3 -2
- package/dist/scatterplot/utils/createAesGetter.d.ts.map +1 -1
- package/dist/scatterplot/utils/createAesGetter.js +21 -21
- package/dist/scatterplot/utils/createAesGetter.js.map +1 -1
- package/dist/scatterplot/utils/createLegendInfo.d.ts +2 -10
- package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
- package/dist/scatterplot/utils/createLegendInfo.js +44 -37
- package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
- package/dist/scatterplot/utils/formatColumnValue.d.ts +5 -0
- package/dist/scatterplot/utils/formatColumnValue.d.ts.map +1 -0
- package/dist/scatterplot/utils/formatColumnValue.js +11 -0
- package/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
- package/dist/scatterplot/utils/getVisibleLabels.d.ts +6 -9
- package/dist/scatterplot/utils/getVisibleLabels.d.ts.map +1 -1
- package/dist/scatterplot/utils/getVisibleLabels.js +46 -56
- package/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts +18 -15
- package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +231 -214
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/SettingsImpl.d.ts +2 -2
- package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
- package/dist/scatterplot-umap/SettingsImpl.js +25 -25
- package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/scatterplot-umap/colors.d.ts +6 -0
- package/dist/scatterplot-umap/colors.d.ts.map +1 -0
- package/dist/scatterplot-umap/colors.js +42 -0
- package/dist/scatterplot-umap/colors.js.map +1 -0
- package/dist/scatterplot-umap/components/LowerSVG.d.ts +2 -2
- package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.js +97 -94
- package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.js +20 -19
- package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
- package/dist/scatterplot-umap/index.d.ts +0 -2
- package/dist/scatterplot-umap/index.d.ts.map +1 -1
- package/dist/scatterplot-umap/index.js +77 -102
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/scatterplot-umap/types.d.ts +7 -10
- package/dist/scatterplot-umap/types.d.ts.map +1 -1
- package/dist/types/bubble.d.ts +44 -12
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/common.d.ts +22 -3
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +3 -1
- package/dist/types/common.js.map +1 -1
- package/dist/types/dendro.d.ts +113 -10
- package/dist/types/dendro.d.ts.map +1 -1
- package/dist/types/dendro.js +1 -1
- package/dist/types/dendro.js.map +1 -1
- package/dist/types/discrete.d.ts +99 -22
- package/dist/types/discrete.d.ts.map +1 -1
- package/dist/types/discrete.js +3 -3
- package/dist/types/discrete.js.map +1 -1
- package/dist/types/heatmap.d.ts +187 -28
- package/dist/types/heatmap.d.ts.map +1 -1
- package/dist/types/heatmap.js +1 -1
- package/dist/types/heatmap.js.map +1 -1
- package/dist/types/histogram.d.ts +30 -8
- package/dist/types/histogram.d.ts.map +1 -1
- package/dist/types/histogram.js +1 -1
- package/dist/types/histogram.js.map +1 -1
- package/dist/types/scatterplot-umap.d.ts +149 -15
- package/dist/types/scatterplot-umap.d.ts.map +1 -1
- package/dist/types/scatterplot-umap.js +9 -9
- package/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/types/scatterplot.d.ts +164 -12
- package/dist/types/scatterplot.d.ts.map +1 -1
- package/dist/types/scatterplot.js +1 -1
- package/dist/types/scatterplot.js.map +1 -1
- package/dist/utils/TextMeasurer/TextMeasurer.d.ts +7 -0
- package/dist/utils/TextMeasurer/TextMeasurer.d.ts.map +1 -0
- package/dist/utils/TextMeasurer/TextMeasurer.js +42 -0
- package/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
- package/dist/utils/TextMeasurer/charToWidth.json.js +155 -0
- package/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
- package/dist/utils/arrangeLegendParts.js +1 -1
- package/dist/utils/arrangeLegendParts.js.map +1 -1
- package/dist/utils/getChartEdgeSides.d.ts +1 -1
- package/dist/utils/getLegendWidth.d.ts.map +1 -1
- package/dist/utils/getLegendWidth.js +1 -1
- package/dist/utils/getLegendWidth.js.map +1 -1
- package/package.json +5 -3
- package/dist/bubble/getCells.d.ts.map +0 -1
- package/dist/bubble/getCells.js +0 -91
- package/dist/bubble/getCells.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/add.js +0 -30
- package/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/cover.js +0 -29
- package/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/data.js +0 -12
- package/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/extent.js +0 -7
- package/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/find.js +0 -26
- package/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/quad.js +0 -7
- package/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
- package/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/remove.js +0 -21
- package/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/root.js +0 -7
- package/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/size.js +0 -12
- package/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/visit.js +0 -14
- package/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
- package/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/x.js +0 -11
- package/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
- package/dist/node_modules/d3-quadtree/src/y.js +0 -11
- package/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
- package/dist/utils/TextMeasurer.d.ts +0 -8
- package/dist/utils/TextMeasurer.d.ts.map +0 -1
- package/dist/utils/TextMeasurer.js +0 -27
- package/dist/utils/TextMeasurer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linearRegression.js","sources":["../../src/scatterplot/linearRegression.ts"],"sourcesContent":["import type {Dot, GroupedDots} from './dots';\nimport type {ScatterplotSettingsImpl} from './ScatterplotSettingsImpl';\nimport type {ContinuousAesFromColumn, InheritAesScatterplot, Row} from '../types';\nimport type {ColumnName} from '../types';\nimport fCDF from '@stdlib/stats-base-dists-f-cdf';\nimport {extent, mean, sum} from 'd3-array';\nimport type {ScaleLinear} from 'd3-scale';\nimport {area} from 'd3-shape';\n\nconst CONFIDENCE_LEVEL = 0.05;\n\n/*\n Returns the normal deviate Z corresponding to a given lower tail area of P; Z is accurate to about 1 part in 10**16.\n\n Wichura, M. J. (1988) Algorithm AS 241: The percentage points of the normal distribution. Applied Statistics, 37, 477–484.\n\n extension of:\n Beasley, J. D./ Springer, S. G. (1977), The percentage points of the NormalDistribution, Applied Statistics. 26, 118–121.\n\n Excel: STANDNORMINV(); R: qnorm()\n */\n\nfunction normdev(p: number) {\n if (p < 0 || p > 1) throw Error('P p < 0 || p > 1 in linear regression calculation');\n if (p == 0) return -Infinity;\n if (p == 1) return Infinity;\n\n /* eslint-disable @typescript-eslint/no-loss-of-precision */\n const a0 = 3.387132872796366608,\n a1 = 1.3314166789178437745e2,\n a2 = 1.9715909503065514427e3,\n a3 = 1.3731693765509461125e4,\n a4 = 4.5921953931549871457e4,\n a5 = 6.7265770927008700853e4,\n a6 = 3.3430575583588128105e4,\n a7 = 2.5090809287301226727e3,\n b1 = 4.2313330701600911252e1,\n b2 = 6.871870074920579083e2,\n b3 = 5.3941960214247511077e3,\n b4 = 2.1213794301586595867e4,\n b5 = 3.930789580009271061e4,\n b6 = 2.8729085735721942674e4,\n b7 = 5.226495278852854561e3,\n c0 = 1.42343711074968357734,\n c1 = 4.6303378461565452959,\n c2 = 5.7694972214606914055,\n c3 = 3.64784832476320460504,\n c4 = 1.27045825245236838258,\n c5 = 2.4178072517745061177e-1,\n c6 = 2.27238449892691845833e-2,\n c7 = 7.7454501427834140764e-4,\n d1 = 2.05319162663775882187,\n d2 = 1.6763848301838038494,\n d3 = 6.8976733498510000455e-1,\n d4 = 1.4810397642748007459e-1,\n d5 = 1.51986665636164571966e-2,\n d6 = 5.475938084995344946e-4,\n d7 = 1.05075007164441684324e-9,\n e0 = 6.6579046435011037772,\n e1 = 5.4637849111641143699,\n e2 = 1.7848265399172913358,\n e3 = 2.9656057182850489123e-1,\n e4 = 2.6532189526576123093e-2,\n e5 = 1.2426609473880784386e-3,\n e6 = 2.71155556874348757815e-5,\n e7 = 2.01033439929228813265e-7,\n f1 = 5.9983220655588793769e-1,\n f2 = 1.3692988092273580531e-1,\n f3 = 1.48753612908506148525e-2,\n f4 = 7.868691311456132591e-4,\n f5 = 1.8463183175100546818e-5,\n f6 = 1.4215117583164458887e-7,\n f7 = 2.04426310338993978564e-15;\n /* eslint-enable @typescript-eslint/no-loss-of-precision */\n\n const q = p - 0.5;\n let r, z;\n\n // p close to 0.5\n if (Math.abs(q) <= 0.425) {\n r = 0.180625 - q * q;\n z =\n (q * (((((((a7 * r + a6) * r + a5) * r + a4) * r + a3) * r + a2) * r + a1) * r + a0)) /\n (((((((b7 * r + b6) * r + b5) * r + b4) * r + b3) * r + b2) * r + b1) * r + 1);\n return z;\n }\n\n if (q > 0) r = 1 - p;\n else r = p;\n r = Math.sqrt(-Math.log(r));\n\n // p neither close to 0.5 nor 0 or 1\n if (r <= 5) {\n r += -1.6;\n z =\n (((((((c7 * r + c6) * r + c5) * r + c4) * r + c3) * r + c2) * r + c1) * r + c0) /\n (((((((d7 * r + d6) * r + d5) * r + d4) * r + d3) * r + d2) * r + d1) * r + 1);\n }\n // p near 0 or 1\n else {\n r += -5;\n z =\n (((((((e7 * r + e6) * r + e5) * r + e4) * r + e3) * r + e2) * r + e1) * r + e0) /\n (((((((f7 * r + f6) * r + f5) * r + f4) * r + f3) * r + f2) * r + f1) * r + 1);\n }\n\n if (q < 0.0) z = -z;\n return z;\n}\n\n/*\nHill's approximated inverse t-distribution calculates t given df and two-tail probability:\nHill, G. W. (1970), Algorithm 396: Student's t-quantiles. Communications of the ACM, 13(10), 619–620.\n\nResult should be \"correct to at least 6 significant digits even for the analytic continuation through noninteger values of n > 5\". For higher precision (used in R, ...) see:\nHill, G. W. (1981) Remark on Algorithm 396, ACM Transactions on Mathematical Software, 7, 250–1.\n\nExcel: TINV(); R: qt()\n*/\nfunction inverseT(p: number, df: number) {\n const {sin, cos, sqrt, pow, exp, PI} = Math;\n let x: number, y: number;\n\n if (df == 1) return cos((p * PI) / 2) / sin((p * PI) / 2);\n if (df == 2) return sqrt(2 / (p * (2 - p)) - 2);\n\n const a = 1 / (df - 0.5);\n const b = 48 / (a * a);\n let c = (((20700 * a) / b - 98) * a - 16) * a + 96.36;\n const d = ((94.5 / (b + c) - 3) / b + 1) * sqrt(a * PI * 0.5) * df;\n x = d * p;\n y = pow(x, 2 / df);\n\n if (y > 0.05 + a) {\n // The procedure normdev(p) is assumed to return a negative normal\n // deviate at the lower tail probability level p, e.g. -2.32 for p = 0.01.\n x = normdev(p / 2);\n y = x * x;\n if (df < 5) c = c + 0.3 * (df - 4.5) * (x + 0.6);\n c = (((0.05 * d * x - 5) * x - 7) * x - 2) * x + b + c;\n y = (((((0.4 * y + 6.3) * y + 36) * y + 94.5) / c - y - 3) / b + 1) * x;\n y = a * y * y;\n if (y > 0.002) y = exp(y) - 1;\n else y = 0.5 * y * y + y;\n } else {\n y =\n (((1 / (((df + 6) / (df * y) - 0.089 * d - 0.822) * (df + 2) * 3) + 0.5 / (df + 4)) * y - 1) * (df + 1)) /\n (df + 2) +\n 1 / y;\n }\n\n return sqrt(df * y);\n}\n\nexport function linearRegression(data: {x: number; y: number}[]): [number, number] {\n let n = data.length,\n sumX = 0,\n sumY = 0,\n sumXY = 0,\n sumX2 = 0;\n for (let i = 0; i < data.length; ++i) {\n const xi = data[i].x;\n const yi = data[i].y;\n if (!Number.isFinite(xi) || !Number.isFinite(yi)) {\n --n;\n continue;\n }\n sumX += xi;\n sumY += yi;\n sumXY += xi * yi;\n sumX2 += xi * xi;\n }\n const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n const intercept = (sumY - slope * sumX) / n;\n\n return [slope, intercept];\n}\n\nfunction getCoefficientsInterval(dots: Dot[], slope: number, intercept: number) {\n const predict = (x: number) => x * slope + intercept;\n const n = dots.length;\n const meanX = sum(dots, d => d.x) / dots.length;\n const t = inverseT(CONFIDENCE_LEVEL, n - 2);\n\n const se_b = Math.sqrt(\n sum(dots, dot => (dot.y - predict(dot.x)) ** 2) / (n - 2) / sum(dots, dot => (dot.x - meanX) ** 2)\n );\n const slopeError = se_b * t;\n\n const se_a = se_b * Math.sqrt(sum(dots, dot => dot.x ** 2) / n);\n const interceptError = se_a * t;\n\n return {slope, intercept, slopeError, interceptError};\n}\n\nexport type PointIntervalInfo = {\n x: number; y: number, left: number; right: number\n}\n// https://stats.stackexchange.com/questions/101318/understanding-shape-and-calculation-of-confidence-bands-in-linear-regression\nexport function confidenceInterval(\n data: {x: number; y: number}[],\n predict: (x: number) => number\n): (x: number) => PointIntervalInfo {\n const mean = sum(data, d => d.x) / data.length;\n let a = 0,\n b = 0;\n for (let i = 0; i < data.length; ++i) {\n a += Math.pow(data[i].x - mean, 2);\n b += Math.pow(data[i].y - predict(data[i].x), 2);\n }\n const sy = Math.sqrt(b / (data.length - 2));\n const t = inverseT(CONFIDENCE_LEVEL, data.length - 2);\n return function (x: number) {\n const Y = predict(x);\n const se = sy * Math.sqrt(1 / data.length + Math.pow(x - mean, 2) / a);\n const left = Y - t * se;\n const right = Y + t * se;\n return {x, y: Y, left: isNaN(left) ? Y : left, right: isNaN(right) ? Y : right};\n };\n}\n\nfunction getR2(dots: Dot[]) {\n const n = dots.length;\n return Math.pow(\n (n * sum(dots, (d: Dot) => d.x * d.y) - sum(dots, (d: Dot) => d.x) * sum(dots, (d: Dot) => d.y)) /\n (Math.sqrt(\n n * sum(dots, d => d.x * d.x) -\n Math.pow(\n sum(dots, d => d.x),\n 2\n )\n ) *\n Math.sqrt(\n n * sum(dots, d => d.y * d.y) -\n Math.pow(\n sum(dots, d => d.y),\n 2\n )\n )),\n 2\n );\n}\n\nfunction getVariance(arr: Dot[], getter: (d: Dot) => number) {\n const vMean = mean(arr, getter) as number;\n\n return mean(arr.map(v => (getter(v) - vMean) ** 2)) as number;\n}\n\nfunction getStandardDeviation(arr: Dot[], getter: (d: Dot) => number) {\n return Math.sqrt(getVariance(arr, getter));\n}\n\nfunction getCovariance(arr: Dot[], getterX: (d: Dot) => number, getterY: (d: Dot) => number) {\n const meanX = mean(arr, getterX) as number;\n const meanY = mean(arr, getterY) as number;\n const n = arr.length;\n\n return sum(arr, d => (d.x - meanX) * (d.y - meanY)) / n;\n}\n\nfunction getR(dots: Dot[]) {\n const cov = getCovariance(\n dots,\n d => d.x,\n d => d.y\n );\n const sigmaX = getStandardDeviation(dots, d => d.x);\n const sigmaY = getStandardDeviation(dots, d => d.y);\n\n return cov / (sigmaX * sigmaY);\n}\n\nfunction getPValue(dots: Dot[], predict: (x: number) => number) {\n const n = dots.length;\n const p = 1; // number of coefficients\n const dfm = 1; // degrees of freedom model\n const dfe = n - p - 1; // degrees of freedom error\n const meanY = mean(dots, d => d.y) as number;\n const ssr = sum(dots, d => (predict(d.x) - meanY) ** 2); // sum of squares regression\n const sse = sum(dots, d => (predict(d.x) - d.y) ** 2); // sum of squares errors\n\n const msr = ssr / dfm;\n const mse = sse / dfe;\n\n const f = msr / mse;\n\n const pval = fCDF(f, dfm, dfe);\n\n return 1.0 - pval; // \"greater\" p-value\n}\n\ntype TrendInfo = {\n predict: (x: number) => number;\n getInterval: (x: number) => PointIntervalInfo;\n getArea: (x: ScaleLinear<number, number>, y: ScaleLinear<number, number>, range: number[]) => string;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n data: Row;\n bounded: boolean;\n showStats: boolean;\n xBounds: [number, number];\n stats: {\n r2?: number;\n r?: number;\n pValue?: number;\n coefficients?: {slope: number, intercept: number, slopeError:number, interceptError: number};\n };\n};\nexport type TrendsData = Record<string, TrendInfo[]>;\n\n//dotsByFacets, facetKeys, categoryGroupingCombinations, grouping, trend\nexport function getRegressionData(\n dotsByFacets: GroupedDots,\n facetKeys: string[],\n groupingKeysValues: string[][],\n grouping: ColumnName[],\n trend: ScatterplotSettingsImpl['trend']\n): TrendsData | null {\n if (!trend) {\n return null;\n }\n return facetKeys.reduce((res: TrendsData, facetKey) => {\n const facetDots = dotsByFacets[facetKey].dots;\n res[facetKey] = groupingKeysValues.map(values => {\n const dots = facetDots.filter(dot =>\n grouping.every((column, idx) => String(dot.data[column.value]) === values[idx])\n );\n const [minX = 0, maxX = 0] = extent(dots, (dot: Dot) => dot.x);\n const [slope, intercept] = linearRegression(dots);\n const predict = (x: number) => slope * x + intercept;\n const getInterval = confidenceInterval(dots, predict);\n\n return {\n predict,\n getInterval,\n getArea: (scaleX: ScaleLinear<number, number>, scaleY: ScaleLinear<number, number>, range: number[]) =>\n area<PointIntervalInfo>()\n .x(d => scaleX(d.x))\n .y0(d => scaleY(d.left))\n .y1(d => scaleY(d.right))(range.map(getInterval)) ?? '',\n color: trend.color,\n bounded: trend.bounded,\n data: dots[0].data,\n showStats: true,\n xBounds: [minX, maxX],\n stats: {\n r2: getR2(dots),\n r: getR(dots),\n pValue: getPValue(dots, predict),\n coefficients: getCoefficientsInterval(dots, slope, intercept),\n },\n };\n });\n return res;\n }, {});\n}\n"],"names":["CONFIDENCE_LEVEL","normdev","p","a0","a1","a2","a3","a4","a5","a6","a7","b1","b2","b3","b4","b5","b6","b7","c0","c1","c2","c3","c4","c5","c6","c7","d1","d2","d3","d4","d5","d6","d7","e0","e1","e2","e3","e4","e5","e6","e7","f1","f2","f3","f4","f5","f6","f7","q","r","z","inverseT","df","sin","cos","sqrt","pow","exp","PI","x","y","b","c","d","linearRegression","data","n","sumX","sumY","sumXY","sumX2","i","xi","yi","slope","intercept","getCoefficientsInterval","dots","predict","meanX","sum","t","se_b","dot","slopeError","interceptError","confidenceInterval","mean","a","sy","Y","se","left","right","getR2","getVariance","arr","getter","vMean","v","getStandardDeviation","getCovariance","getterX","getterY","meanY","getR","cov","sigmaX","sigmaY","getPValue","dfm","dfe","ssr","sse","msr","mse","f","fCDF","getRegressionData","dotsByFacets","facetKeys","groupingKeysValues","grouping","trend","res","facetKey","facetDots","values","column","idx","minX","maxX","extent","getInterval","scaleX","scaleY","range","area"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linearRegression.js","sources":["../../src/scatterplot/linearRegression.ts"],"sourcesContent":["import fCDF from '@stdlib/stats-base-dists-f-cdf';\nimport { extent, mean, sum } from 'd3-array';\nimport type { ScaleLinear } from 'd3-scale';\nimport { area } from 'd3-shape';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, ContinuousAesFromColumn, InheritAesScatterplot } from '../types';\nimport type { Dot, GroupedDots } from './dots';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\n\nconst CONFIDENCE_LEVEL = 0.05;\n\n/*\n Returns the normal deviate Z corresponding to a given lower tail area of P; Z is accurate to about 1 part in 10**16.\n\n Wichura, M. J. (1988) Algorithm AS 241: The percentage points of the normal distribution. Applied Statistics, 37, 477–484.\n\n extension of:\n Beasley, J. D./ Springer, S. G. (1977), The percentage points of the NormalDistribution, Applied Statistics. 26, 118–121.\n\n Excel: STANDNORMINV(); R: qnorm()\n */\n\nfunction normdev(p: number) {\n if (p < 0 || p > 1) throw Error('P p < 0 || p > 1 in linear regression calculation');\n if (p == 0) return -Infinity;\n if (p == 1) return Infinity;\n\n /* eslint-disable @typescript-eslint/no-loss-of-precision */\n const a0 = 3.387132872796366608,\n a1 = 1.3314166789178437745e2,\n a2 = 1.9715909503065514427e3,\n a3 = 1.3731693765509461125e4,\n a4 = 4.5921953931549871457e4,\n a5 = 6.7265770927008700853e4,\n a6 = 3.3430575583588128105e4,\n a7 = 2.5090809287301226727e3,\n b1 = 4.2313330701600911252e1,\n b2 = 6.871870074920579083e2,\n b3 = 5.3941960214247511077e3,\n b4 = 2.1213794301586595867e4,\n b5 = 3.930789580009271061e4,\n b6 = 2.8729085735721942674e4,\n b7 = 5.226495278852854561e3,\n c0 = 1.42343711074968357734,\n c1 = 4.6303378461565452959,\n c2 = 5.7694972214606914055,\n c3 = 3.64784832476320460504,\n c4 = 1.27045825245236838258,\n c5 = 2.4178072517745061177e-1,\n c6 = 2.27238449892691845833e-2,\n c7 = 7.7454501427834140764e-4,\n d1 = 2.05319162663775882187,\n d2 = 1.6763848301838038494,\n d3 = 6.8976733498510000455e-1,\n d4 = 1.4810397642748007459e-1,\n d5 = 1.51986665636164571966e-2,\n d6 = 5.475938084995344946e-4,\n d7 = 1.05075007164441684324e-9,\n e0 = 6.6579046435011037772,\n e1 = 5.4637849111641143699,\n e2 = 1.7848265399172913358,\n e3 = 2.9656057182850489123e-1,\n e4 = 2.6532189526576123093e-2,\n e5 = 1.2426609473880784386e-3,\n e6 = 2.71155556874348757815e-5,\n e7 = 2.01033439929228813265e-7,\n f1 = 5.9983220655588793769e-1,\n f2 = 1.3692988092273580531e-1,\n f3 = 1.48753612908506148525e-2,\n f4 = 7.868691311456132591e-4,\n f5 = 1.8463183175100546818e-5,\n f6 = 1.4215117583164458887e-7,\n f7 = 2.04426310338993978564e-15;\n /* eslint-enable @typescript-eslint/no-loss-of-precision */\n\n const q = p - 0.5;\n let r, z;\n\n // p close to 0.5\n if (Math.abs(q) <= 0.425) {\n r = 0.180625 - q * q;\n z =\n (q * (((((((a7 * r + a6) * r + a5) * r + a4) * r + a3) * r + a2) * r + a1) * r + a0)) /\n (((((((b7 * r + b6) * r + b5) * r + b4) * r + b3) * r + b2) * r + b1) * r + 1);\n return z;\n }\n\n if (q > 0) r = 1 - p;\n else r = p;\n r = Math.sqrt(-Math.log(r));\n\n // p neither close to 0.5 nor 0 or 1\n if (r <= 5) {\n r += -1.6;\n z =\n (((((((c7 * r + c6) * r + c5) * r + c4) * r + c3) * r + c2) * r + c1) * r + c0) /\n (((((((d7 * r + d6) * r + d5) * r + d4) * r + d3) * r + d2) * r + d1) * r + 1);\n }\n // p near 0 or 1\n else {\n r += -5;\n z =\n (((((((e7 * r + e6) * r + e5) * r + e4) * r + e3) * r + e2) * r + e1) * r + e0) /\n (((((((f7 * r + f6) * r + f5) * r + f4) * r + f3) * r + f2) * r + f1) * r + 1);\n }\n\n if (q < 0.0) z = -z;\n return z;\n}\n\n/*\nHill's approximated inverse t-distribution calculates t given df and two-tail probability:\nHill, G. W. (1970), Algorithm 396: Student's t-quantiles. Communications of the ACM, 13(10), 619–620.\n\nResult should be \"correct to at least 6 significant digits even for the analytic continuation through noninteger values of n > 5\". For higher precision (used in R, ...) see:\nHill, G. W. (1981) Remark on Algorithm 396, ACM Transactions on Mathematical Software, 7, 250–1.\n\nExcel: TINV(); R: qt()\n*/\nfunction inverseT(p: number, df: number) {\n const {sin, cos, sqrt, pow, exp, PI} = Math;\n let x: number, y: number;\n\n if (df == 1) return cos((p * PI) / 2) / sin((p * PI) / 2);\n if (df == 2) return sqrt(2 / (p * (2 - p)) - 2);\n\n const a = 1 / (df - 0.5);\n const b = 48 / (a * a);\n let c = (((20700 * a) / b - 98) * a - 16) * a + 96.36;\n const d = ((94.5 / (b + c) - 3) / b + 1) * sqrt(a * PI * 0.5) * df;\n x = d * p;\n y = pow(x, 2 / df);\n\n if (y > 0.05 + a) {\n // The procedure normdev(p) is assumed to return a negative normal\n // deviate at the lower tail probability level p, e.g. -2.32 for p = 0.01.\n x = normdev(p / 2);\n y = x * x;\n if (df < 5) c = c + 0.3 * (df - 4.5) * (x + 0.6);\n c = (((0.05 * d * x - 5) * x - 7) * x - 2) * x + b + c;\n y = (((((0.4 * y + 6.3) * y + 36) * y + 94.5) / c - y - 3) / b + 1) * x;\n y = a * y * y;\n if (y > 0.002) y = exp(y) - 1;\n else y = 0.5 * y * y + y;\n } else {\n y =\n (((1 / (((df + 6) / (df * y) - 0.089 * d - 0.822) * (df + 2) * 3) + 0.5 / (df + 4)) * y - 1) * (df + 1)) /\n (df + 2) +\n 1 / y;\n }\n\n return sqrt(df * y);\n}\n\nexport function linearRegression(data: {x: number; y: number}[]): [number, number] {\n let n = data.length,\n sumX = 0,\n sumY = 0,\n sumXY = 0,\n sumX2 = 0;\n for (let i = 0; i < data.length; ++i) {\n const xi = data[i].x;\n const yi = data[i].y;\n if (!Number.isFinite(xi) || !Number.isFinite(yi)) {\n --n;\n continue;\n }\n sumX += xi;\n sumY += yi;\n sumXY += xi * yi;\n sumX2 += xi * xi;\n }\n const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n const intercept = (sumY - slope * sumX) / n;\n\n return [slope, intercept];\n}\n\nfunction getCoefficientsInterval(dots: Dot[], slope: number, intercept: number) {\n const predict = (x: number) => x * slope + intercept;\n const n = dots.length;\n const meanX = sum(dots, d => d.x) / dots.length;\n const t = inverseT(CONFIDENCE_LEVEL, n - 2);\n\n const se_b = Math.sqrt(\n sum(dots, dot => (dot.y - predict(dot.x)) ** 2) / (n - 2) / sum(dots, dot => (dot.x - meanX) ** 2)\n );\n const slopeError = se_b * t;\n\n const se_a = se_b * Math.sqrt(sum(dots, dot => dot.x ** 2) / n);\n const interceptError = se_a * t;\n\n return {slope, intercept, slopeError, interceptError};\n}\n\nexport type PointIntervalInfo = {\n x: number; y: number, left: number; right: number\n}\n// https://stats.stackexchange.com/questions/101318/understanding-shape-and-calculation-of-confidence-bands-in-linear-regression\nexport function confidenceInterval(\n data: {x: number; y: number}[],\n predict: (x: number) => number\n): (x: number) => PointIntervalInfo {\n const mean = sum(data, d => d.x) / data.length;\n let a = 0,\n b = 0;\n for (let i = 0; i < data.length; ++i) {\n a += Math.pow(data[i].x - mean, 2);\n b += Math.pow(data[i].y - predict(data[i].x), 2);\n }\n const sy = Math.sqrt(b / (data.length - 2));\n const t = inverseT(CONFIDENCE_LEVEL, data.length - 2);\n return function (x: number) {\n const Y = predict(x);\n const se = sy * Math.sqrt(1 / data.length + Math.pow(x - mean, 2) / a);\n const left = Y - t * se;\n const right = Y + t * se;\n return {x, y: Y, left: isNaN(left) ? Y : left, right: isNaN(right) ? Y : right};\n };\n}\n\nfunction getR2(dots: Dot[]) {\n const n = dots.length;\n return Math.pow(\n (n * sum(dots, (d: Dot) => d.x * d.y) - sum(dots, (d: Dot) => d.x) * sum(dots, (d: Dot) => d.y)) /\n (Math.sqrt(\n n * sum(dots, d => d.x * d.x) -\n Math.pow(\n sum(dots, d => d.x),\n 2\n )\n ) *\n Math.sqrt(\n n * sum(dots, d => d.y * d.y) -\n Math.pow(\n sum(dots, d => d.y),\n 2\n )\n )),\n 2\n );\n}\n\nfunction getVariance(arr: Dot[], getter: (d: Dot) => number) {\n const vMean = mean(arr, getter) as number;\n\n return mean(arr.map(v => (getter(v) - vMean) ** 2)) as number;\n}\n\nfunction getStandardDeviation(arr: Dot[], getter: (d: Dot) => number) {\n return Math.sqrt(getVariance(arr, getter));\n}\n\nfunction getCovariance(arr: Dot[], getterX: (d: Dot) => number, getterY: (d: Dot) => number) {\n const meanX = mean(arr, getterX) as number;\n const meanY = mean(arr, getterY) as number;\n const n = arr.length;\n\n return sum(arr, d => (d.x - meanX) * (d.y - meanY)) / n;\n}\n\nfunction getR(dots: Dot[]) {\n const cov = getCovariance(\n dots,\n d => d.x,\n d => d.y\n );\n const sigmaX = getStandardDeviation(dots, d => d.x);\n const sigmaY = getStandardDeviation(dots, d => d.y);\n\n return cov / (sigmaX * sigmaY);\n}\n\nfunction getPValue(dots: Dot[], predict: (x: number) => number) {\n const n = dots.length;\n const p = 1; // number of coefficients\n const dfm = 1; // degrees of freedom model\n const dfe = n - p - 1; // degrees of freedom error\n const meanY = mean(dots, d => d.y) as number;\n const ssr = sum(dots, d => (predict(d.x) - meanY) ** 2); // sum of squares regression\n const sse = sum(dots, d => (predict(d.x) - d.y) ** 2); // sum of squares errors\n\n const msr = ssr / dfm;\n const mse = sse / dfe;\n\n const f = msr / mse;\n\n const pval = fCDF(f, dfm, dfe);\n\n return 1.0 - pval; // \"greater\" p-value\n}\n\ntype TrendInfo = {\n idx: number;\n predict: (x: number) => number;\n getInterval: (x: number) => PointIntervalInfo;\n getArea: (x: ScaleLinear<number, number>, y: ScaleLinear<number, number>, range: number[]) => string;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n bounded: boolean;\n showStats: boolean;\n xBounds: [number, number];\n stats: {\n r2?: number;\n r?: number;\n pValue?: number;\n coefficients?: {slope: number, intercept: number, slopeError:number, interceptError: number};\n };\n};\nexport type TrendsData = Record<string, TrendInfo[]>;\n\nexport function getRegressionData(\n dataFrame: DataFrame,\n dotsByFacets: GroupedDots,\n facetKeys: string[],\n groupingKeysValues: string[][],\n grouping: ColumnName[],\n trend: ScatterplotSettingsImpl['trend']\n): TrendsData | null {\n if (!trend) {\n return null;\n }\n return facetKeys.reduce((res: TrendsData, facetKey) => {\n const facetDots = dotsByFacets[facetKey].dots;\n \n res[facetKey] = groupingKeysValues\n .map(values => {\n const dots = facetDots.filter(dot =>\n grouping.every((column, idx) => String(dataFrame.getColumnValue(column.value, dot.idx)) === values[idx])\n );\n\n if (dots.length === 0) return null;\n\n const [minX = 0, maxX = 0] = extent(dots, (dot: Dot) => dot.x);\n const [slope, intercept] = linearRegression(dots);\n const predict = (x: number) => slope * x + intercept;\n const getInterval = confidenceInterval(dots, predict);\n\n return {\n idx: dots[0].idx,\n predict,\n getInterval,\n getArea: (scaleX: ScaleLinear<number, number>, scaleY: ScaleLinear<number, number>, range: number[]) =>\n area<PointIntervalInfo>()\n .x(d => scaleX(d.x))\n .y0(d => scaleY(d.left))\n .y1(d => scaleY(d.right))(range.map(getInterval)) ?? '',\n color: trend.color,\n bounded: trend.bounded,\n showStats: true,\n xBounds: [minX, maxX],\n stats: {\n r2: getR2(dots),\n r: getR(dots),\n pValue: getPValue(dots, predict),\n coefficients: getCoefficientsInterval(dots, slope, intercept),\n },\n };\n })\n .filter((item) => item !== null) as TrendInfo[];\n \n return res;\n }, {});\n}\n"],"names":["CONFIDENCE_LEVEL","normdev","p","a0","a1","a2","a3","a4","a5","a6","a7","b1","b2","b3","b4","b5","b6","b7","c0","c1","c2","c3","c4","c5","c6","c7","d1","d2","d3","d4","d5","d6","d7","e0","e1","e2","e3","e4","e5","e6","e7","f1","f2","f3","f4","f5","f6","f7","q","r","z","inverseT","df","sin","cos","sqrt","pow","exp","PI","x","y","a","b","c","d","linearRegression","data","n","sumX","sumY","sumXY","sumX2","xi","yi","slope","intercept","getCoefficientsInterval","dots","predict","meanX","sum","t","se_b","dot","slopeError","interceptError","confidenceInterval","mean","i","sy","Y","se","left","right","getR2","getVariance","arr","getter","vMean","v","getStandardDeviation","getCovariance","getterX","getterY","meanY","getR","cov","sigmaX","sigmaY","getPValue","dfm","dfe","ssr","sse","msr","mse","f","fCDF","getRegressionData","dataFrame","dotsByFacets","facetKeys","groupingKeysValues","grouping","trend","res","facetKey","facetDots","values","column","idx","minX","maxX","extent","getInterval","scaleX","scaleY","range","area","item"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { DataFrame } from '../../DataFrame';
|
|
2
|
+
import { AesItem, ContinuousAesFromColumn, InheritAesScatterplot, LineShape, PointShape, ScatterplotLegendInfo } from '../../types';
|
|
3
|
+
export declare function createAesGetter<ValueType extends string | number | PointShape | LineShape>(dataFrame: DataFrame, legendInfo: ScatterplotLegendInfo, aesItem: ValueType | ContinuousAesFromColumn<ValueType> | InheritAesScatterplot, field: keyof AesItem): (rowIndex: number) => ValueType;
|
|
3
4
|
//# sourceMappingURL=createAesGetter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAesGetter.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/createAesGetter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createAesGetter.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/createAesGetter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACR,OAAO,EACP,uBAAuB,EACvB,qBAAqB,EACrB,SAAS,EACT,UAAU,EACV,qBAAqB,EACxB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,eAAe,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,EACtF,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,qBAAqB,EACjC,OAAO,EAAE,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,GAAG,qBAAqB,EAC/E,KAAK,EAAE,MAAM,OAAO,cAOU,MAAM,KAEO,SAAS,CAuBvD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DEFAULT_DOT_AES as p, DEFAULT_COMMON_AES as a } from "../constants.js";
|
|
2
1
|
import { isContinuousAes as m } from "../../types/common.js";
|
|
3
2
|
import "../../types/discrete.js";
|
|
4
3
|
import "../../types/scatterplot.js";
|
|
@@ -6,36 +5,37 @@ import "../../types/heatmap.js";
|
|
|
6
5
|
import "../../types/dendro.js";
|
|
7
6
|
import "../../types/histogram.js";
|
|
8
7
|
import "../../types/bubble.js";
|
|
9
|
-
import { getContinuousColorScale as
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { getContinuousColorScale as a } from "../../utils/getContinuousColorScale.js";
|
|
9
|
+
import { DEFAULT_DOT_AES as g, DEFAULT_COMMON_AES as s } from "../constants.js";
|
|
10
|
+
import { sqrt as f } from "../../node_modules/d3-scale/src/pow.js";
|
|
11
|
+
function C(o) {
|
|
12
|
+
return typeof o == "object" && o !== null && "type" in o && "value" in o && o.type === "grouping";
|
|
13
13
|
}
|
|
14
|
-
function
|
|
15
|
-
if (m(
|
|
16
|
-
const { domain:
|
|
17
|
-
return function(
|
|
18
|
-
const c =
|
|
14
|
+
function T(o, p, n, t) {
|
|
15
|
+
if (m(n) && t === "dotSize") {
|
|
16
|
+
const { domain: r, range: u } = n, i = f().domain(r).range(u);
|
|
17
|
+
return function(e) {
|
|
18
|
+
const c = i(Number(o.getColumnValue(n.columnName.value, e)));
|
|
19
19
|
return Math.max(1, c);
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
if (m(
|
|
23
|
-
const { domain:
|
|
22
|
+
if (m(n) && (t === "dotFill" || t === "lineColor")) {
|
|
23
|
+
const { domain: r, range: u, type: i = "linear" } = n, e = a(u, r, i);
|
|
24
24
|
return function(c) {
|
|
25
|
-
const l =
|
|
26
|
-
return l === null ?
|
|
25
|
+
const l = o.getColumnValue(n.columnName.value, c);
|
|
26
|
+
return l === null ? g.color : e(Number(l));
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
if (
|
|
30
|
-
const
|
|
31
|
-
return function(
|
|
32
|
-
|
|
33
|
-
return (
|
|
29
|
+
if (C(n)) {
|
|
30
|
+
const r = n.value, u = p[r].aesMap;
|
|
31
|
+
return function(i) {
|
|
32
|
+
const e = o.getColumnValueCategory(r, i);
|
|
33
|
+
return u(e, t) ?? s[t];
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
-
return () =>
|
|
36
|
+
return () => n;
|
|
37
37
|
}
|
|
38
38
|
export {
|
|
39
|
-
|
|
39
|
+
T as createAesGetter
|
|
40
40
|
};
|
|
41
41
|
//# sourceMappingURL=createAesGetter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAesGetter.js","sources":["../../../src/scatterplot/utils/createAesGetter.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"createAesGetter.js","sources":["../../../src/scatterplot/utils/createAesGetter.ts"],"sourcesContent":["import type { ScalePower } from 'd3-scale';\nimport { scaleSqrt } from 'd3-scale';\nimport type { DataFrame } from '../../DataFrame';\nimport type {\n AesItem,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n LineShape,\n PointShape,\n ScatterplotLegendInfo\n} from '../../types';\nimport { isContinuousAes } from '../../types';\nimport { getContinuousColorScale } from '../../utils/getContinuousColorScale';\nimport { DEFAULT_COMMON_AES, DEFAULT_DOT_AES } from '../constants';\n\nfunction isInheritedAes(v: InheritAesScatterplot | unknown): v is InheritAesScatterplot {\n return typeof v === 'object' && v !== null && 'type' in v && 'value' in v && v.type === 'grouping';\n}\nexport function createAesGetter<ValueType extends string | number | PointShape | LineShape>(\n dataFrame: DataFrame,\n legendInfo: ScatterplotLegendInfo,\n aesItem: ValueType | ContinuousAesFromColumn<ValueType> | InheritAesScatterplot,\n field: keyof AesItem\n) {\n if (isContinuousAes<ValueType>(aesItem) && field === 'dotSize') {\n const {domain, range} = aesItem;\n const scale: ScalePower<number, number> = scaleSqrt<number, number>()\n .domain(domain)\n .range(range as number[]);\n return function(rowIndex: number) {\n const v = scale(Number(dataFrame.getColumnValue(aesItem.columnName.value, rowIndex)));\n return Math.max(1, v as number) as ValueType;\n };\n }\n if (isContinuousAes<ValueType>(aesItem) && (field === 'dotFill' || field === 'lineColor')) {\n const {domain, range, type = 'linear'} = aesItem;\n const scale = getContinuousColorScale(range as string[], domain, type);\n return function(rowIndex: number) {\n const v = dataFrame.getColumnValue(aesItem.columnName.value, rowIndex);\n if (v === null) {\n return DEFAULT_DOT_AES.color as ValueType;\n }\n return scale(Number(v)) as ValueType;\n };\n }\n if (isInheritedAes(aesItem)) {\n const columnId = aesItem.value;\n const mapping = legendInfo[columnId].aesMap;\n return function(rowIndex: number) {\n const category = dataFrame.getColumnValueCategory(columnId, rowIndex);\n return (mapping(category, field) ?? DEFAULT_COMMON_AES[field]) as ValueType;\n };\n }\n return () => aesItem as ValueType;\n}\n"],"names":["isInheritedAes","v","createAesGetter","dataFrame","legendInfo","aesItem","field","isContinuousAes","domain","range","scale","scaleSqrt","rowIndex","type","getContinuousColorScale","DEFAULT_DOT_AES","columnId","mapping","category","DEFAULT_COMMON_AES"],"mappings":";;;;;;;;;;AAeA,SAASA,EAAeC,GAAgE;AACpF,SAAO,OAAOA,KAAM,YAAYA,MAAM,QAAQ,UAAUA,KAAK,WAAWA,KAAKA,EAAE,SAAS;AAC5F;AACO,SAASC,EACZC,GACAC,GACAC,GACAC,GACF;AACE,MAAIC,EAA2BF,CAAO,KAAKC,MAAU,WAAW;AAC5D,UAAM,EAAC,QAAAE,GAAQ,OAAAC,EAAA,IAASJ,GAClBK,IAAoCC,IACrC,OAAOH,CAAM,EACb,MAAMC,CAAiB;AAC5B,WAAO,SAASG,GAAkB;AAC9B,YAAMX,IAAIS,EAAM,OAAOP,EAAU,eAAeE,EAAQ,WAAW,OAAOO,CAAQ,CAAC,CAAC;AACpF,aAAO,KAAK,IAAI,GAAGX,CAAW;AAAA,IAClC;AAAA,EACJ;AACA,MAAIM,EAA2BF,CAAO,MAAMC,MAAU,aAAaA,MAAU,cAAc;AACvF,UAAM,EAAC,QAAAE,GAAQ,OAAAC,GAAO,MAAAI,IAAO,aAAYR,GACnCK,IAAQI,EAAwBL,GAAmBD,GAAQK,CAAI;AACrE,WAAO,SAASD,GAAkB;AAC9B,YAAMX,IAAIE,EAAU,eAAeE,EAAQ,WAAW,OAAOO,CAAQ;AACrE,aAAIX,MAAM,OACCc,EAAgB,QAEpBL,EAAM,OAAOT,CAAC,CAAC;AAAA,IAC1B;AAAA,EACJ;AACA,MAAID,EAAeK,CAAO,GAAG;AACzB,UAAMW,IAAWX,EAAQ,OACnBY,IAAUb,EAAWY,CAAQ,EAAE;AACrC,WAAO,SAASJ,GAAkB;AAC9B,YAAMM,IAAWf,EAAU,uBAAuBa,GAAUJ,CAAQ;AACpE,aAAQK,EAAQC,GAAUZ,CAAK,KAAKa,EAAmBb,CAAK;AAAA,IAChE;AAAA,EACJ;AACA,SAAO,MAAMD;AACjB;"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { DataFrame } from '../../DataFrame';
|
|
2
|
+
import { AesItem, Category, ColumnName, ScatterplotLayer, ScatterplotLegendInfo } from '../../types';
|
|
2
3
|
import { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';
|
|
3
|
-
|
|
4
|
-
export declare function addPalettesToAesMapping(uniqueValues: string[], usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>>, inheritedAes?: ScatterplotSettingsImpl['inheritedAes'][string]): Record<string, {
|
|
5
|
-
dotFill?: string | undefined;
|
|
6
|
-
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
7
|
-
dotSize?: number | undefined;
|
|
8
|
-
lineWidth?: number | undefined;
|
|
9
|
-
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
10
|
-
lineColor?: string | undefined;
|
|
11
|
-
fillColor?: string | undefined;
|
|
12
|
-
}>;
|
|
4
|
+
export declare function addPalettesToAesMapping(columnName: ColumnName, usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>>, inheritedAes?: ScatterplotSettingsImpl['inheritedAes'][string]): (category: Category, field: keyof AesItem) => string | number | undefined;
|
|
13
5
|
export declare function createLegendInfo(data: DataFrame, grouping: ColumnName[], layers: ScatterplotLayer[], inheritedAes: ScatterplotSettingsImpl['inheritedAes']): ScatterplotLegendInfo;
|
|
14
6
|
//# sourceMappingURL=createLegendInfo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLegendInfo.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/createLegendInfo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"createLegendInfo.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/createLegendInfo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACR,OAAO,EACP,QAAQ,EACR,UAAU,EAGV,gBAAgB,EAChB,qBAAqB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAyB1E,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,UAAU,EACtB,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAC7D,YAAY,CAAC,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,cAQ/B,QAAQ,SAAS,MAAM,OAAO,iCAchE;AAKD,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,UAAU,EAAE,EACtB,MAAM,EAAE,gBAAgB,EAAE,EAC1B,YAAY,EAAE,uBAAuB,CAAC,cAAc,CAAC,GACtD,qBAAqB,CA4CvB"}
|
|
@@ -1,50 +1,57 @@
|
|
|
1
|
-
import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS as v } from "../../constants.js";
|
|
2
|
+
const h = /* @__PURE__ */ (() => {
|
|
3
|
+
const t = /* @__PURE__ */ new Map();
|
|
4
|
+
return {
|
|
5
|
+
clear: () => t.clear(),
|
|
6
|
+
getIndex: (g, o) => {
|
|
7
|
+
let e = t.get(g.value);
|
|
8
|
+
e === void 0 && (e = /* @__PURE__ */ new Map(), t.set(g.value, e));
|
|
9
|
+
let r = e.get(o);
|
|
10
|
+
return r === void 0 && (r = e.size, e.set(o, r)), r;
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
};
|
|
13
|
+
})();
|
|
14
|
+
function C(t, c, u) {
|
|
15
|
+
h.clear();
|
|
16
|
+
const g = u && Object.keys(u).length > 0, o = c.dotFill, e = o && o.length > 0, r = c.lineColor, d = r && r.length > 0;
|
|
17
|
+
return (s, a) => {
|
|
18
|
+
var l;
|
|
19
|
+
const n = g ? (l = u[s]) == null ? void 0 : l[a] : void 0;
|
|
20
|
+
return a === "dotFill" && e ? o[h.getIndex(t, s) % o.length] ?? n : a === "lineColor" && d ? r[h.getIndex(t, s) % r.length] ?? n : n;
|
|
21
|
+
};
|
|
16
22
|
}
|
|
17
|
-
function
|
|
18
|
-
return typeof
|
|
23
|
+
function I(t) {
|
|
24
|
+
return typeof t == "object" && "type" in t && t.type === "grouping";
|
|
19
25
|
}
|
|
20
|
-
function
|
|
21
|
-
return
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
function L(t, c, u, g) {
|
|
27
|
+
return c.reduce((o, e) => {
|
|
28
|
+
const r = (n) => e.valueLabels ? t.getColumnValueCategory(e.valueLabels, n) : void 0, d = /* @__PURE__ */ new Set(), f = {};
|
|
29
|
+
u.forEach((n) => {
|
|
30
|
+
n.aes && Object.entries(n.aes).forEach(([l, i]) => {
|
|
31
|
+
I(i) && i.value === e.value && (d.add(l), f[l] = i.palette);
|
|
26
32
|
});
|
|
27
33
|
});
|
|
28
|
-
let
|
|
29
|
-
if (d.has("dotFill")) {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
let s = {}, a = [];
|
|
35
|
+
if (d.has("dotFill") || d.has("dotShape")) {
|
|
36
|
+
const n = t.getColumnCategories(e.value);
|
|
37
|
+
n.length < v ? (s = n.reduce((l, i) => {
|
|
38
|
+
const p = t.getColumnCategoryRowIndex(e.value, i);
|
|
39
|
+
return l[i] = r(p) ?? i, l;
|
|
40
|
+
}, s), a = n.sort((l, i) => {
|
|
41
|
+
var p;
|
|
42
|
+
return ((p = s[l]) == null ? void 0 : p.localeCompare(s[i] ?? "", "en", { numeric: !0 })) ?? 0;
|
|
43
|
+
})) : a = n;
|
|
37
44
|
}
|
|
38
|
-
return
|
|
39
|
-
values:
|
|
45
|
+
return o[e.value] = {
|
|
46
|
+
values: a,
|
|
40
47
|
usedAes: [...d],
|
|
41
|
-
aesMap: C(
|
|
42
|
-
labels:
|
|
43
|
-
},
|
|
48
|
+
aesMap: C(e, f, g[e.value]),
|
|
49
|
+
labels: s
|
|
50
|
+
}, o;
|
|
44
51
|
}, {});
|
|
45
52
|
}
|
|
46
53
|
export {
|
|
47
54
|
C as addPalettesToAesMapping,
|
|
48
|
-
|
|
55
|
+
L as createLegendInfo
|
|
49
56
|
};
|
|
50
57
|
//# sourceMappingURL=createLegendInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLegendInfo.js","sources":["../../../src/scatterplot/utils/createLegendInfo.ts"],"sourcesContent":["import {MAX_SHOWN_UNIQUE_VALUES_IN_LABELS} from '../../constants';\nimport type {DataFrame} from '../../DataFrame';\nimport type {
|
|
1
|
+
{"version":3,"file":"createLegendInfo.js","sources":["../../../src/scatterplot/utils/createLegendInfo.ts"],"sourcesContent":["import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS } from '../../constants';\nimport type { DataFrame } from '../../DataFrame';\nimport type {\n AesItem,\n Category,\n ColumnName,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotLayer,\n ScatterplotLegendInfo\n} from '../../types';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\n\nconst categoryIndexer = (() => {\n const map = new Map<string, Map<Category, number>>();\n const clear = () => map.clear();\n const getIndex = (columnName: ColumnName, category: Category): number => {\n let categoryMap = map.get(columnName.value);\n if (categoryMap === undefined) {\n categoryMap = new Map();\n map.set(columnName.value, categoryMap);\n }\n let index = categoryMap.get(category);\n if (index === undefined) {\n index = categoryMap.size;\n categoryMap.set(category, index);\n }\n return index;\n };\n\n return {\n clear,\n getIndex,\n };\n})();\n\nexport function addPalettesToAesMapping(\n columnName: ColumnName,\n usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>>,\n inheritedAes?: ScatterplotSettingsImpl['inheritedAes'][string],\n) {\n categoryIndexer.clear();\n const hasIngeritedAes = inheritedAes && Object.keys(inheritedAes).length > 0;\n const dotFill = usedAesFromPalettes['dotFill'];\n const hasDotFill = dotFill && dotFill.length > 0;\n const lineColor = usedAesFromPalettes['lineColor'];\n const hasLineColor = lineColor && lineColor.length > 0;\n const getAesField = (category: Category, field: keyof AesItem) => {\n const inheritedResult = hasIngeritedAes ? inheritedAes[category]?.[field] : undefined;\n \n if (field === 'dotFill' && hasDotFill) {\n return dotFill[categoryIndexer.getIndex(columnName, category) % dotFill.length] ?? inheritedResult;\n }\n if (field === 'lineColor' && hasLineColor) {\n return lineColor[categoryIndexer.getIndex(columnName, category) % lineColor.length] ?? inheritedResult;\n }\n \n return inheritedResult;\n };\n\n return getAesField;\n}\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\nexport function createLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n inheritedAes: ScatterplotSettingsImpl['inheritedAes']\n): ScatterplotLegendInfo {\n return grouping.reduce((res: ScatterplotLegendInfo, column) => {\n // TODO: remove String conversion\n const getValueLabel = (index: number) => {\n return column.valueLabels\n ? data.getColumnValueCategory(column.valueLabels, index)\n : undefined;\n };\n\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes:Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (!layer.aes) return;\n \n Object.entries(layer.aes).forEach(([key, value]) => {\n if (!(isInheritMapping(value) && value.value === column.value)) return;\n \n usedAes.add(key as keyof AesItem);\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n });\n });\n let labels: Record<Category, string> = {};\n let values: Category[] = [];\n if (usedAes.has('dotFill') || usedAes.has('dotShape')) {\n const categories = data.getColumnCategories(column.value);\n if (categories.length < MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n labels = categories.reduce((res, category) => {\n const index = data.getColumnCategoryRowIndex(column.value, category);\n res[category] = getValueLabel(index) ?? category;\n return res;\n }, labels);\n values = categories.sort((a, b) => labels[a]?.localeCompare(labels[b] ?? '', 'en', {numeric: true}) ?? 0);\n } else {\n values = categories;\n }\n }\n res[column.value] = {\n values,\n usedAes: [...usedAes],\n aesMap: addPalettesToAesMapping(column, usedAesFromPalettes, inheritedAes[column.value]),\n labels,\n };\n return res;\n }, {});\n}"],"names":["categoryIndexer","map","columnName","category","categoryMap","index","addPalettesToAesMapping","usedAesFromPalettes","inheritedAes","hasIngeritedAes","dotFill","hasDotFill","lineColor","hasLineColor","field","inheritedResult","_a","isInheritMapping","value","createLegendInfo","data","grouping","layers","res","column","getValueLabel","usedAes","layer","key","labels","values","categories","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","a","b"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DataFrame } from '../../DataFrame';
|
|
2
|
+
import { ColumnName } from '../../types';
|
|
3
|
+
import { numberFormat } from '../../utils/numberFormat';
|
|
4
|
+
export declare function formatColumnValue(data: DataFrame, rowIdx: number, column: ColumnName | null | undefined, numberFormatter?: typeof numberFormat): string | null;
|
|
5
|
+
//# sourceMappingURL=formatColumnValue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatColumnValue.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/formatColumnValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,UAAU,GAAG,IAAI,GAAG,SAAS,EAAE,eAAe,sBAAe,iBAUpI"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { numberFormat as l } from "../../utils/numberFormat.js";
|
|
2
|
+
function m(u, t, r, n = l) {
|
|
3
|
+
if (!r)
|
|
4
|
+
return null;
|
|
5
|
+
const e = u.getColumnValue(r.valueLabels ?? r.value, t);
|
|
6
|
+
return !(typeof e == "number") || e === null ? e : n(e);
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
m as formatColumnValue
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=formatColumnValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatColumnValue.js","sources":["../../../src/scatterplot/utils/formatColumnValue.ts"],"sourcesContent":["import type {DataFrame} from '../../DataFrame';\nimport type {ColumnName} from '../../types';\nimport {numberFormat} from '../../utils/numberFormat';\n\nexport function formatColumnValue(data:DataFrame, rowIdx:number, column:ColumnName | null | undefined, numberFormatter = numberFormat) {\n if (!column) {\n return null;\n }\n const value = data.getColumnValue(column.valueLabels ?? column.value, rowIdx);\n const isNumber = typeof value === 'number';\n if (!isNumber || value === null) {\n return value;\n }\n return numberFormatter(value);\n}"],"names":["formatColumnValue","data","rowIdx","column","numberFormatter","numberFormat","value"],"mappings":";AAIO,SAASA,EAAkBC,GAAgBC,GAAeC,GAAsCC,IAAkBC,GAAc;AACnI,MAAI,CAACF;AACD,WAAO;AAEX,QAAMG,IAAQL,EAAK,eAAeE,EAAO,eAAeA,EAAO,OAAOD,CAAM;AAE5E,SAAI,EADa,OAAOI,KAAU,aACjBA,MAAU,OAChBA,IAEJF,EAAgBE,CAAK;AAChC;"}
|
|
@@ -2,17 +2,15 @@ import { Dot } from '../dots';
|
|
|
2
2
|
type XPosition = 'right' | 'middle' | 'left';
|
|
3
3
|
type YPosition = 'top' | 'middle' | 'bottom';
|
|
4
4
|
export type Label = {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
dot: Dot;
|
|
5
8
|
name: string;
|
|
6
9
|
width: number;
|
|
7
10
|
height: number;
|
|
8
|
-
x: number;
|
|
9
|
-
y: number;
|
|
10
11
|
padding: number;
|
|
11
12
|
xPosition: XPosition;
|
|
12
13
|
yPosition: YPosition;
|
|
13
|
-
bbox: LabelBBox;
|
|
14
|
-
outerBBox: LabelBBox;
|
|
15
|
-
dot: Dot;
|
|
16
14
|
};
|
|
17
15
|
export type LabelBBox = {
|
|
18
16
|
minX: number;
|
|
@@ -20,9 +18,8 @@ export type LabelBBox = {
|
|
|
20
18
|
minY: number;
|
|
21
19
|
maxY: number;
|
|
22
20
|
};
|
|
23
|
-
export declare function
|
|
24
|
-
export declare function
|
|
25
|
-
export declare function
|
|
26
|
-
export declare function getFilteredLabels(labels: Label[], width: number, height: number, vOffset?: number, hOffset?: number): Label[];
|
|
21
|
+
export declare function getLabelMinX(label: Label): number;
|
|
22
|
+
export declare function getLabelMinY(label: Label): number;
|
|
23
|
+
export declare function createLabelPositioner(chartW: number, chartH: number, yOffset?: number, xOffset?: number): (x: number, y: number, w: number, h: number, padding: number) => null | [XPosition, YPosition];
|
|
27
24
|
export {};
|
|
28
25
|
//# sourceMappingURL=getVisibleLabels.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getVisibleLabels.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/getVisibleLabels.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getVisibleLabels.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/utils/getVisibleLabels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAEnC,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC7C,KAAK,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC7C,MAAM,MAAM,KAAK,GAAG;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAA;AAkDD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,UAExC;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,UAExC;AAcD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,SAAe,EAAE,OAAO,SAAe,IAIxG,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,SAAS,MAAM,KAAG,IAAI,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAYtG"}
|
|
@@ -1,60 +1,50 @@
|
|
|
1
|
-
import
|
|
2
|
-
function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return
|
|
19
|
-
}
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
[
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
for (const h of t)
|
|
45
|
-
for (const [f, p] of B) {
|
|
46
|
-
const r = { ...h, yPosition: f, xPosition: p };
|
|
47
|
-
if (r.bbox = x(r), r.outerBBox = g(r, i, d), Y(r.outerBBox, o, n) && !e.collides(r.outerBBox)) {
|
|
48
|
-
s.push(r), e.insert(r.outerBBox);
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return s;
|
|
1
|
+
import L from "../../node_modules/rbush/index.js";
|
|
2
|
+
function d(n, r, t, o, i) {
|
|
3
|
+
return o !== "middle" && i !== "middle" && (t *= 0.7), o === "right" ? n + t : o === "middle" ? n - r / 2 : n - r - t;
|
|
4
|
+
}
|
|
5
|
+
function B(n, r, t, o, i) {
|
|
6
|
+
return o !== "middle" && i !== "middle" && (t *= 0.7), i === "middle" ? n - r / 2 : i === "top" ? n - t - r : n + t;
|
|
7
|
+
}
|
|
8
|
+
function l(n, r, t, o, i, e) {
|
|
9
|
+
return d(n, r, t, o, i) - e;
|
|
10
|
+
}
|
|
11
|
+
function x(n, r, t, o, i, e) {
|
|
12
|
+
return B(n, r, t, o, i) - e;
|
|
13
|
+
}
|
|
14
|
+
function p(n, r, t, o, i, e, u, c, s, m = { minX: 0, maxX: 0, minY: 0, maxY: 0 }) {
|
|
15
|
+
return m.minX = l(n, t, i, e, u, s), m.maxX = d(n, t, i, e, u) + t + s, m.minY = x(r, o, i, e, u, c), m.maxY = m.minY + o + 2 * c, m;
|
|
16
|
+
}
|
|
17
|
+
function C(n, r, t) {
|
|
18
|
+
return n.minX >= 0 && n.maxX <= r && n.minY >= 0 && n.maxY <= t;
|
|
19
|
+
}
|
|
20
|
+
function E(n) {
|
|
21
|
+
return d(n.x, n.width, n.padding, n.xPosition, n.yPosition);
|
|
22
|
+
}
|
|
23
|
+
function F(n) {
|
|
24
|
+
return B(n.y, n.height, n.padding, n.xPosition, n.yPosition);
|
|
25
|
+
}
|
|
26
|
+
const O = [
|
|
27
|
+
["middle", "right"],
|
|
28
|
+
["top", "right"],
|
|
29
|
+
["bottom", "right"],
|
|
30
|
+
["middle", "left"],
|
|
31
|
+
["top", "left"],
|
|
32
|
+
["bottom", "left"],
|
|
33
|
+
["top", "middle"],
|
|
34
|
+
["bottom", "middle"]
|
|
35
|
+
], Y = 2, M = { minX: 0, maxX: 0, minY: 0, maxY: 0 };
|
|
36
|
+
function _(n, r, t = Y, o = Y) {
|
|
37
|
+
const i = M, e = new L();
|
|
38
|
+
return (u, c, s, m, g) => {
|
|
39
|
+
for (const [f, X] of O)
|
|
40
|
+
if (p(u, c, s, m, g, X, f, t, o, i), C(i, n, r) && !e.collides(i))
|
|
41
|
+
return e.insert({ ...i }), [X, f];
|
|
42
|
+
return null;
|
|
43
|
+
};
|
|
53
44
|
}
|
|
54
45
|
export {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
w as updateLabelsBBoxes
|
|
46
|
+
_ as createLabelPositioner,
|
|
47
|
+
E as getLabelMinX,
|
|
48
|
+
F as getLabelMinY
|
|
59
49
|
};
|
|
60
50
|
//# sourceMappingURL=getVisibleLabels.js.map
|