@milaboratories/graph-maker 1.1.138 → 1.1.139

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.
Files changed (219) hide show
  1. package/dist/GraphMaker/components/LassoControls/index.vue.js +15 -13
  2. package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
  3. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +9 -3
  4. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  5. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +17 -2
  6. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  7. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +13 -4
  8. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  9. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +28 -7
  10. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  11. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +6 -2
  12. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts.map +1 -1
  13. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +16 -2
  14. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  15. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +14 -2
  16. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  17. package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js +95 -72
  18. package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js.map +1 -1
  19. package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +1 -1
  20. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +124 -122
  21. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
  22. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +72 -91
  23. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
  24. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js +43 -41
  25. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
  26. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +28 -0
  27. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -0
  28. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +94 -0
  29. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -0
  30. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +42 -38
  31. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  33. package/dist/node_modules/@milaboratories/miplots4/dist/common/Legend.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js +11 -11
  35. package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js.map +1 -1
  36. package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js +20 -0
  37. package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js.map +1 -0
  38. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +181 -181
  39. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js.map +1 -1
  40. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js +2 -2
  41. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js.map +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js +45 -45
  43. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js +27 -27
  45. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js.map +1 -1
  46. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Legend.js.map +1 -1
  47. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js +18 -18
  48. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js.map +1 -1
  49. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js +36 -36
  50. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js +45 -41
  52. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js.map +1 -1
  53. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js +33 -33
  54. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js.map +1 -1
  55. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js +90 -93
  56. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +200 -199
  58. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +17 -17
  60. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/layers/BoxElement.js.map +1 -1
  62. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +102 -99
  63. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js +31 -36
  65. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js.map +1 -1
  66. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js +62 -74
  67. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js.map +1 -1
  68. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js +52 -53
  69. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js.map +1 -1
  70. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js +32 -32
  71. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js +7 -6
  73. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js.map +1 -1
  74. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js +23 -23
  75. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js +63 -63
  77. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js.map +1 -1
  78. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js +60 -64
  79. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js.map +1 -1
  80. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +23 -23
  81. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js +5 -5
  83. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js.map +1 -1
  84. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js +13 -13
  85. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +1 -1
  86. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +258 -256
  87. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  88. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +1 -1
  89. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  90. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js +45 -44
  91. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  92. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +107 -106
  93. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  94. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +18 -18
  95. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  96. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +99 -95
  97. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  98. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +30 -29
  99. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  100. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
  101. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
  102. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  103. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +143 -142
  104. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js.map +1 -1
  105. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/HistogramSettingsImpl.js.map +1 -1
  106. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js +30 -30
  107. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js.map +1 -1
  108. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/ChartsGroup.js +7 -7
  109. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js +53 -54
  110. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js.map +1 -1
  111. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js +59 -55
  112. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js.map +1 -1
  113. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +7 -7
  114. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +6 -12
  115. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
  116. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-shape/src/line.js.map +1 -1
  117. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js +148 -0
  118. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js.map +1 -0
  119. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +172 -168
  120. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
  121. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +26 -26
  122. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  123. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +11 -11
  124. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js +30 -29
  125. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
  126. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js +135 -153
  127. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  128. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js +35 -32
  129. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  130. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +27 -27
  131. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  132. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +14 -14
  133. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/constants.js.map +1 -1
  134. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js +24 -22
  135. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
  136. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +11 -14
  137. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
  138. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +57 -58
  139. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
  140. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js +85 -83
  141. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
  142. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js +20 -20
  143. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  144. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js +44 -37
  145. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  146. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js +11 -0
  147. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
  148. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js +46 -56
  149. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
  150. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +223 -205
  151. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  152. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js +22 -22
  153. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  154. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js +42 -0
  155. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js.map +1 -0
  156. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +84 -81
  157. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  158. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/SVGLayer.js +11 -11
  159. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js +15 -14
  160. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  161. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js +89 -114
  162. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js.map +1 -1
  163. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +3 -1
  164. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  165. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +1 -1
  166. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js.map +1 -1
  167. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +1 -1
  168. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  169. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +1 -1
  170. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  171. package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js +1 -1
  172. package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js.map +1 -1
  173. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +1 -1
  174. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
  175. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js +4 -4
  176. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js.map +1 -1
  177. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js +39 -0
  178. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
  179. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js +101 -0
  180. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
  181. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js +4 -4
  182. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js.map +1 -1
  183. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js +3 -3
  184. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js.map +1 -1
  185. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +1031 -1023
  186. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
  187. package/package.json +3 -3
  188. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js +0 -91
  189. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js.map +0 -1
  190. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js +0 -30
  191. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
  192. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js +0 -29
  193. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
  194. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js +0 -12
  195. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
  196. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js +0 -7
  197. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
  198. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js +0 -26
  199. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
  200. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js +0 -7
  201. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
  202. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
  203. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
  204. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js +0 -21
  205. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
  206. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js +0 -7
  207. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
  208. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js +0 -12
  209. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
  210. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js +0 -14
  211. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
  212. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
  213. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
  214. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js +0 -11
  215. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
  216. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js +0 -11
  217. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
  218. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js +0 -24
  219. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/index.ts"],"sourcesContent":["import {AbstractChart} from '../AbstractChart';\nimport type {GroupedDots} from './dots';\nimport {getDots} from './dots';\nimport type {ScatterplotLayerData} from './getLayersData';\nimport {getLayersData} from './getLayersData';\nimport {addPalettesToAesMapping, createLegendInfo} from './utils/createLegendInfo';\nimport type {\n AesItem,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotEventHandlers,\n ScatterplotLegendInfo,\n} from '../types';\nimport {renderToString} from 'react-dom/server';\nimport ChartRenderer from './ChartRenderer';\nimport type {ScatterplotSettings} from '../types';\nimport {ScatterplotSettingsImpl} from './ScatterplotSettingsImpl';\nimport type {DataFrame} from '../DataFrame';\nimport type {TrendsData} from './linearRegression';\nimport {getRegressionData} from './linearRegression';\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\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}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n prevSettings.grouping.some((el, idx) => el.value !== settings.grouping[idx]?.value) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, facetBy, grouping, keyColumn, trend, layers, inheritedAes, label, highlight} = this.settings;\n const keys = this.data.getColumnCategories(keyColumn.value);\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value));\n const categoryGroupingKeysKeysLists = grouping.map(column => this.data.getColumnCategories(column.value));\n\n const facetKeysCombinations = facetKeysLists.length ? getKeysCombinations([...facetKeysLists]) : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysKeysLists.length\n ? getKeysCombinations([...categoryGroupingKeysKeysLists])\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues, keyColumn.value]);\n const onlyPositive = {\n x: this.data.rows.every(row => {\n const v = row[x.value];\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.rows.every(row => {\n const v = row[y.value];\n return v === null || !(Number(v) < 0);\n }),\n };\n // console.info('only positive Y:', onlyPositive.y);\n // console.info('only positive X:', onlyPositive.x);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, keys);\n const facetKeys = Object.keys(dotsByFacets);\n const trendsData = getRegressionData(dotsByFacets, facetKeys, categoryGroupingCombinations, grouping, trend);\n\n const legendLabels = createLegendInfo(this.data, grouping, layers, inheritedAes);\n const layersData = getLayersData(layers, facetKeys, dotsByFacets, categoryGroupingCombinations, grouping);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers, inheritedAes} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(column => {\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) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === column.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[column.value].usedAes = [...usedAes];\n calculated.legendLabels[column.value].aesMap = addPalettesToAesMapping(calculated.legendLabels[column.value].values, usedAesFromPalettes, inheritedAes[column.value]);\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping,\n layers,\n trend,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","isInheritMapping","value","ChartScatterplot","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","_c","_d","l","prevData","prevKeys","c","x","y","facetBy","grouping","keyColumn","trend","layers","inheritedAes","label","highlight","facetKeysLists","column","categoryGroupingKeysKeysLists","facetKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","row","v","dotsByFacets","getDots","facetKeys","trendsData","getRegressionData","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","chartSettings","facetSettings"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n AesItem,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotEventHandlers,\n ScatterplotLegendInfo,\n ScatterplotSettings,\n} from '../types';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\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}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n console.error(err);\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n } catch (err) {\n console.error(err);\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n prevSettings.grouping.some((el, idx) => el.value !== settings.grouping[idx]?.value) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, facetBy, grouping, keyColumn, trend, layers, inheritedAes, label, highlight} = this.settings;\n const keys = this.data.getColumnCategories(keyColumn.value);\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues, keyColumn.value]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, keys);\n const facetKeys = Object.keys(dotsByFacets);\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, grouping, trend);\n\n const legendLabels = createLegendInfo(this.data, grouping, layers, inheritedAes);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, grouping);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers, inheritedAes} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(column => {\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) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === column.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[column.value].usedAes = [...usedAes];\n calculated.legendLabels[column.value].aesMap = addPalettesToAesMapping(\n column,\n usedAesFromPalettes,\n inheritedAes[column.value]\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping,\n layers,\n trend,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","isInheritMapping","value","ChartScatterplot","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","_c","_d","l","prevData","prevKeys","h","x","y","facetBy","grouping","keyColumn","trend","layers","inheritedAes","label","highlight","facetKeysLists","column","v","categoryGroupingKeysLists","facetKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","dotsByFacets","getDots","facetKeys","trendsData","getRegressionData","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","chartSettings","facetSettings"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,64 +1,64 @@
1
- import t1 from "../node_modules/@stdlib/stats-base-dists-f-cdf/lib/index.js";
2
- import n1 from "../node_modules/d3-array/src/extent.js";
3
- import e1 from "../node_modules/d3-shape/src/area.js";
1
+ import tt from "../node_modules/@stdlib/stats-base-dists-f-cdf/lib/index.js";
2
+ import rt from "../node_modules/d3-array/src/extent.js";
3
+ import et from "../node_modules/d3-shape/src/area.js";
4
4
  import x from "../node_modules/d3-array/src/sum.js";
5
5
  import N from "../node_modules/d3-array/src/mean.js";
6
- const I = 0.05;
7
- function r1(t) {
8
- const r = 3.3871328727963665, o = 133.14166789178438, u = 1971.5909503065513, s = 13731.69376550946, h = 45921.95393154987, l = 67265.7709270087, c = 33430.57558358813, i = 2509.0809287301227, e = 42.31333070160091, a = 687.1870074920579, p = 5394.196021424751, f = 21213.794301586597, y = 39307.89580009271, q = 28729.085735721943, $ = 5226.495278852854, g = 1.4234371107496835, d = 4.630337846156546, w = 5.769497221460691, M = 3.6478483247632045, F = 1.2704582524523684, R = 0.2417807251774506, S = 0.022723844989269184, A = 7745450142783414e-19, B = 2.053191626637759, C = 1.6763848301838038, D = 0.6897673349851, P = 0.14810397642748008, V = 0.015198666563616457, j = 5475938084995345e-19, k = 10507500716444169e-25, z = 6.657904643501103, G = 5.463784911164114, H = 1.7848265399172913, J = 0.29656057182850487, K = 0.026532189526576124, L = 0.0012426609473880784, O = 27115555687434876e-21, Q = 20103343992922881e-23, T = 0.599832206555888, U = 0.1369298809227358, W = 0.014875361290850615, X = 7868691311456133e-19, Y = 18463183175100548e-21, Z = 1421511758316446e-22, _ = 20442631033899397e-31, v = t - 0.5;
9
- let n, m;
10
- return Math.abs(v) <= 0.425 ? (n = 0.180625 - v * v, m = v * (((((((i * n + c) * n + l) * n + h) * n + s) * n + u) * n + o) * n + r) / ((((((($ * n + q) * n + y) * n + f) * n + p) * n + a) * n + e) * n + 1), m) : (n = t, n = Math.sqrt(-Math.log(n)), n <= 5 ? (n += -1.6, m = (((((((A * n + S) * n + R) * n + F) * n + M) * n + w) * n + d) * n + g) / (((((((k * n + j) * n + V) * n + P) * n + D) * n + C) * n + B) * n + 1)) : (n += -5, m = (((((((Q * n + O) * n + L) * n + K) * n + J) * n + H) * n + G) * n + z) / (((((((_ * n + Z) * n + Y) * n + X) * n + W) * n + U) * n + T) * n + 1)), m = -m, m);
6
+ const E = 0.05;
7
+ function ot(t) {
8
+ const e = 3.3871328727963665, o = 133.14166789178438, l = 1971.5909503065513, i = 13731.69376550946, h = 45921.95393154987, a = 67265.7709270087, u = 33430.57558358813, c = 2509.0809287301227, n = 42.31333070160091, s = 687.1870074920579, p = 5394.196021424751, f = 21213.794301586597, M = 39307.89580009271, v = 28729.085735721943, q = 5226.495278852854, b = 1.4234371107496835, g = 4.630337846156546, d = 5.769497221460691, w = 3.6478483247632045, m = 1.2704582524523684, R = 0.2417807251774506, S = 0.022723844989269184, V = 7745450142783414e-19, A = 2.053191626637759, B = 1.6763848301838038, D = 0.6897673349851, P = 0.14810397642748008, X = 0.015198666563616457, j = 5475938084995345e-19, k = 10507500716444169e-25, z = 6.657904643501103, G = 5.463784911164114, H = 1.7848265399172913, J = 0.29656057182850487, K = 0.026532189526576124, L = 0.0012426609473880784, O = 27115555687434876e-21, Q = 20103343992922881e-23, T = 0.599832206555888, U = 0.1369298809227358, W = 0.014875361290850615, Y = 7868691311456133e-19, Z = 18463183175100548e-21, _ = 1421511758316446e-22, $ = 20442631033899397e-31, I = t - 0.5;
9
+ let r, y;
10
+ return Math.abs(I) <= 0.425 ? (r = 0.180625 - I * I, y = I * (((((((c * r + u) * r + a) * r + h) * r + i) * r + l) * r + o) * r + e) / (((((((q * r + v) * r + M) * r + f) * r + p) * r + s) * r + n) * r + 1), y) : (r = t, r = Math.sqrt(-Math.log(r)), r <= 5 ? (r += -1.6, y = (((((((V * r + S) * r + R) * r + m) * r + w) * r + d) * r + g) * r + b) / (((((((k * r + j) * r + X) * r + P) * r + D) * r + B) * r + A) * r + 1)) : (r += -5, y = (((((((Q * r + O) * r + L) * r + K) * r + J) * r + H) * r + G) * r + z) / ((((((($ * r + _) * r + Z) * r + Y) * r + W) * r + U) * r + T) * r + 1)), y = -y, y);
11
11
  }
12
- function E(t, r) {
13
- const { sin: o, cos: u, sqrt: s, pow: h, exp: l, PI: c } = Math;
14
- let i, e;
15
- if (r == 1) return u(t * c / 2) / o(t * c / 2);
16
- if (r == 2) return s(2 / (t * (2 - t)) - 2);
17
- const a = 1 / (r - 0.5), p = 48 / (a * a);
18
- let f = ((20700 * a / p - 98) * a - 16) * a + 96.36;
19
- const y = ((94.5 / (p + f) - 3) / p + 1) * s(a * c * 0.5) * r;
20
- return i = y * t, e = h(i, 2 / r), e > 0.05 + a ? (i = r1(t / 2), e = i * i, r < 5 && (f = f + 0.3 * (r - 4.5) * (i + 0.6)), f = (((0.05 * y * i - 5) * i - 7) * i - 2) * i + p + f, e = (((((0.4 * e + 6.3) * e + 36) * e + 94.5) / f - e - 3) / p + 1) * i, e = a * e * e, e > 2e-3 ? e = l(e) - 1 : e = 0.5 * e * e + e) : e = ((1 / (((r + 6) / (r * e) - 0.089 * y - 0.822) * (r + 2) * 3) + 0.5 / (r + 4)) * e - 1) * (r + 1) / (r + 2) + 1 / e, s(r * e);
12
+ function F(t, e) {
13
+ const { sin: o, cos: l, sqrt: i, pow: h, exp: a, PI: u } = Math;
14
+ let c, n;
15
+ if (e == 1) return l(t * u / 2) / o(t * u / 2);
16
+ if (e == 2) return i(2 / (t * (2 - t)) - 2);
17
+ const s = 1 / (e - 0.5), p = 48 / (s * s);
18
+ let f = ((20700 * s / p - 98) * s - 16) * s + 96.36;
19
+ const M = ((94.5 / (p + f) - 3) / p + 1) * i(s * u * 0.5) * e;
20
+ return c = M * t, n = h(c, 2 / e), n > 0.05 + s ? (c = ot(t / 2), n = c * c, e < 5 && (f = f + 0.3 * (e - 4.5) * (c + 0.6)), f = (((0.05 * M * c - 5) * c - 7) * c - 2) * c + p + f, n = (((((0.4 * n + 6.3) * n + 36) * n + 94.5) / f - n - 3) / p + 1) * c, n = s * n * n, n > 2e-3 ? n = a(n) - 1 : n = 0.5 * n * n + n) : n = ((1 / (((e + 6) / (e * n) - 0.089 * M - 0.822) * (e + 2) * 3) + 0.5 / (e + 4)) * n - 1) * (e + 1) / (e + 2) + 1 / n, i(e * n);
21
21
  }
22
- function o1(t) {
23
- let r = t.length, o = 0, u = 0, s = 0, h = 0;
24
- for (let i = 0; i < t.length; ++i) {
25
- const e = t[i].x, a = t[i].y;
26
- if (!Number.isFinite(e) || !Number.isFinite(a)) {
27
- --r;
22
+ function nt(t) {
23
+ let e = t.length, o = 0, l = 0, i = 0, h = 0;
24
+ for (let c = 0; c < t.length; ++c) {
25
+ const n = t[c].x, s = t[c].y;
26
+ if (!Number.isFinite(n) || !Number.isFinite(s)) {
27
+ --e;
28
28
  continue;
29
29
  }
30
- o += e, u += a, s += e * a, h += e * e;
30
+ o += n, l += s, i += n * s, h += n * n;
31
31
  }
32
- const l = (r * s - o * u) / (r * h - o * o), c = (u - l * o) / r;
33
- return [l, c];
32
+ const a = (e * i - o * l) / (e * h - o * o), u = (l - a * o) / e;
33
+ return [a, u];
34
34
  }
35
- function s1(t, r, o) {
36
- const u = (a) => a * r + o, s = t.length, h = x(t, (a) => a.x) / t.length, l = E(I, s - 2), c = Math.sqrt(
37
- x(t, (a) => (a.y - u(a.x)) ** 2) / (s - 2) / x(t, (a) => (a.x - h) ** 2)
38
- ), i = c * l, e = c * Math.sqrt(x(t, (a) => a.x ** 2) / s) * l;
39
- return { slope: r, intercept: o, slopeError: i, interceptError: e };
35
+ function st(t, e, o) {
36
+ const l = (s) => s * e + o, i = t.length, h = x(t, (s) => s.x) / t.length, a = F(E, i - 2), u = Math.sqrt(
37
+ x(t, (s) => (s.y - l(s.x)) ** 2) / (i - 2) / x(t, (s) => (s.x - h) ** 2)
38
+ ), c = u * a, n = u * Math.sqrt(x(t, (s) => s.x ** 2) / i) * a;
39
+ return { slope: e, intercept: o, slopeError: c, interceptError: n };
40
40
  }
41
- function a1(t, r) {
42
- const o = x(t, (c) => c.x) / t.length;
43
- let u = 0, s = 0;
44
- for (let c = 0; c < t.length; ++c)
45
- u += Math.pow(t[c].x - o, 2), s += Math.pow(t[c].y - r(t[c].x), 2);
46
- const h = Math.sqrt(s / (t.length - 2)), l = E(I, t.length - 2);
47
- return function(c) {
48
- const i = r(c), e = h * Math.sqrt(1 / t.length + Math.pow(c - o, 2) / u), a = i - l * e, p = i + l * e;
49
- return { x: c, y: i, left: isNaN(a) ? i : a, right: isNaN(p) ? i : p };
41
+ function it(t, e) {
42
+ const o = x(t, (u) => u.x) / t.length;
43
+ let l = 0, i = 0;
44
+ for (let u = 0; u < t.length; ++u)
45
+ l += Math.pow(t[u].x - o, 2), i += Math.pow(t[u].y - e(t[u].x), 2);
46
+ const h = Math.sqrt(i / (t.length - 2)), a = F(E, t.length - 2);
47
+ return function(u) {
48
+ const c = e(u), n = h * Math.sqrt(1 / t.length + Math.pow(u - o, 2) / l), s = c - a * n, p = c + a * n;
49
+ return { x: u, y: c, left: isNaN(s) ? c : s, right: isNaN(p) ? c : p };
50
50
  };
51
51
  }
52
- function i1(t) {
53
- const r = t.length;
52
+ function ct(t) {
53
+ const e = t.length;
54
54
  return Math.pow(
55
- (r * x(t, (o) => o.x * o.y) - x(t, (o) => o.x) * x(t, (o) => o.y)) / (Math.sqrt(
56
- r * x(t, (o) => o.x * o.x) - Math.pow(
55
+ (e * x(t, (o) => o.x * o.y) - x(t, (o) => o.x) * x(t, (o) => o.y)) / (Math.sqrt(
56
+ e * x(t, (o) => o.x * o.x) - Math.pow(
57
57
  x(t, (o) => o.x),
58
58
  2
59
59
  )
60
60
  ) * Math.sqrt(
61
- r * x(t, (o) => o.y * o.y) - Math.pow(
61
+ e * x(t, (o) => o.y * o.y) - Math.pow(
62
62
  x(t, (o) => o.y),
63
63
  2
64
64
  )
@@ -66,58 +66,60 @@ function i1(t) {
66
66
  2
67
67
  );
68
68
  }
69
- function c1(t, r) {
70
- const o = N(t, r);
71
- return N(t.map((u) => (r(u) - o) ** 2));
69
+ function ut(t, e) {
70
+ const o = N(t, e);
71
+ return N(t.map((l) => (e(l) - o) ** 2));
72
72
  }
73
- function b(t, r) {
74
- return Math.sqrt(c1(t, r));
73
+ function C(t, e) {
74
+ return Math.sqrt(ut(t, e));
75
75
  }
76
- function u1(t, r, o) {
77
- const u = N(t, r), s = N(t, o), h = t.length;
78
- return x(t, (l) => (l.x - u) * (l.y - s)) / h;
76
+ function lt(t, e, o) {
77
+ const l = N(t, e), i = N(t, o), h = t.length;
78
+ return x(t, (a) => (a.x - l) * (a.y - i)) / h;
79
79
  }
80
- function l1(t) {
81
- const r = u1(
80
+ function at(t) {
81
+ const e = lt(
82
82
  t,
83
- (s) => s.x,
84
- (s) => s.y
85
- ), o = b(t, (s) => s.x), u = b(t, (s) => s.y);
86
- return r / (o * u);
83
+ (i) => i.x,
84
+ (i) => i.y
85
+ ), o = C(t, (i) => i.x), l = C(t, (i) => i.y);
86
+ return e / (o * l);
87
87
  }
88
- function h1(t, r) {
89
- const o = t.length, u = 1, s = 1, h = o - u - 1, l = N(t, (f) => f.y), c = x(t, (f) => (r(f.x) - l) ** 2), i = x(t, (f) => (r(f.x) - f.y) ** 2), e = c / s, a = i / h, p = e / a;
90
- return 1 - t1(p, s, h);
88
+ function ht(t, e) {
89
+ const o = t.length, l = 1, i = 1, h = o - l - 1, a = N(t, (f) => f.y), u = x(t, (f) => (e(f.x) - a) ** 2), c = x(t, (f) => (e(f.x) - f.y) ** 2), n = u / i, s = c / h, p = n / s;
90
+ return 1 - tt(p, i, h);
91
91
  }
92
- function M1(t, r, o, u, s) {
93
- return s ? r.reduce((h, l) => {
94
- const c = t[l].dots;
95
- return h[l] = o.map((i) => {
96
- const e = c.filter(
97
- (g) => u.every((d, w) => String(g.data[d.value]) === i[w])
98
- ), [a = 0, p = 0] = n1(e, (g) => g.x), [f, y] = o1(e), q = (g) => f * g + y, $ = a1(e, q);
92
+ function mt(t, e, o, l, i, h) {
93
+ return h ? o.reduce((a, u) => {
94
+ const c = e[u].dots;
95
+ return a[u] = l.map((n) => {
96
+ const s = c.filter(
97
+ (g) => i.every((d, w) => String(t.getColumnValue(d.value, g.idx)) === n[w])
98
+ );
99
+ if (s.length === 0) return null;
100
+ const [p = 0, f = 0] = rt(s, (g) => g.x), [M, v] = nt(s), q = (g) => M * g + v, b = it(s, q);
99
101
  return {
102
+ idx: s[0].idx,
100
103
  predict: q,
101
- getInterval: $,
102
- getArea: (g, d, w) => e1().x((M) => g(M.x)).y0((M) => d(M.left)).y1((M) => d(M.right))(w.map($)) ?? "",
103
- color: s.color,
104
- bounded: s.bounded,
105
- data: e[0].data,
104
+ getInterval: b,
105
+ getArea: (g, d, w) => et().x((m) => g(m.x)).y0((m) => d(m.left)).y1((m) => d(m.right))(w.map(b)) ?? "",
106
+ color: h.color,
107
+ bounded: h.bounded,
106
108
  showStats: !0,
107
- xBounds: [a, p],
109
+ xBounds: [p, f],
108
110
  stats: {
109
- r2: i1(e),
110
- r: l1(e),
111
- pValue: h1(e, q),
112
- coefficients: s1(e, f, y)
111
+ r2: ct(s),
112
+ r: at(s),
113
+ pValue: ht(s, q),
114
+ coefficients: st(s, M, v)
113
115
  }
114
116
  };
115
- }), h;
117
+ }).filter((n) => n !== null), a;
116
118
  }, {}) : null;
117
119
  }
118
120
  export {
119
- a1 as confidenceInterval,
120
- M1 as getRegressionData,
121
- o1 as linearRegression
121
+ it as confidenceInterval,
122
+ mt as getRegressionData,
123
+ nt as linearRegression
122
124
  };
123
125
  //# sourceMappingURL=linearRegression.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"linearRegression.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"linearRegression.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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","i","xi","yi","slope","intercept","getCoefficientsInterval","dots","predict","meanX","sum","t","se_b","dot","slopeError","interceptError","confidenceInterval","mean","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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","x_google_ignoreList":[0]}
@@ -1,4 +1,3 @@
1
- import { DEFAULT_DOT_AES as s, DEFAULT_COMMON_AES as c } from "../constants.js";
2
1
  import { isContinuousAes as l } 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 p } from "../../utils/getContinuousColorScale.js";
10
- import { sqrt as f } from "../../node_modules/d3-scale/src/pow.js";
11
- function A(t) {
12
- return typeof t == "object" && t !== null && "type" in t && "value" in t && t.type === "grouping";
8
+ import { getContinuousColorScale as c } from "../../utils/getContinuousColorScale.js";
9
+ import { DEFAULT_DOT_AES as p, DEFAULT_COMMON_AES as f } from "../constants.js";
10
+ import { sqrt as g } from "../../node_modules/d3-scale/src/pow.js";
11
+ function C(r) {
12
+ return typeof r == "object" && r !== null && "type" in r && "value" in r && r.type === "grouping";
13
13
  }
14
- function M(t, r, u) {
15
- if (l(r) && u === "dotSize") {
16
- const { domain: n, range: o } = r, e = f().domain(n).range(o);
14
+ function b(r, s, e, o) {
15
+ if (l(e) && o === "dotSize") {
16
+ const { domain: t, range: n } = e, u = g().domain(t).range(n);
17
17
  return function(i) {
18
- const a = e(Number(i[r.columnName.value]));
18
+ const a = u(Number(r.getColumnValue(e.columnName.value, i)));
19
19
  return Math.max(1, a);
20
20
  };
21
21
  }
22
- if (l(r) && (u === "dotFill" || u === "lineColor")) {
23
- const { domain: n, range: o, type: e = "linear" } = r, i = p(o, n, e);
22
+ if (l(e) && (o === "dotFill" || o === "lineColor")) {
23
+ const { domain: t, range: n, type: u = "linear" } = e, i = c(n, t, u);
24
24
  return function(a) {
25
- const m = a[r.columnName.value];
26
- return m === null ? s.color : i(Number(m));
25
+ const m = r.getColumnValue(e.columnName.value, a);
26
+ return m === null ? p.color : i(Number(m));
27
27
  };
28
28
  }
29
- if (A(r)) {
30
- const n = r.value, o = t[n].aesMap;
31
- return function(e) {
32
- var i;
33
- return (i = (o == null ? void 0 : o[String(e[n])]) ?? c) == null ? void 0 : i[u];
29
+ if (C(e)) {
30
+ const t = e.value, n = s[t].aesMap;
31
+ return function(u) {
32
+ const i = r.getColumnValueCategory(t, u);
33
+ return n(i, o) ?? f[o];
34
34
  };
35
35
  }
36
- return () => r;
36
+ return () => e;
37
37
  }
38
38
  export {
39
- M as createAesGetter
39
+ b as createAesGetter
40
40
  };
41
41
  //# sourceMappingURL=createAesGetter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAesGetter.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/utils/createAesGetter.ts"],"sourcesContent":["import {DEFAULT_COMMON_AES, DEFAULT_DOT_AES} from '../constants';\nimport type {\n AesItem,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n LineShape,\n PointShape, Row,\n ScatterplotLegendInfo\n} from '../../types';\nimport {isContinuousAes} from '../../types';\nimport {getContinuousColorScale} from '../../utils/getContinuousColorScale';\nimport type {ScalePower} from 'd3-scale';\nimport {scaleSqrt} from 'd3-scale';\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 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(row:Row) {\n const v = scale(Number(row[aesItem.columnName.value]));\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(row:Row) {\n const v = row[aesItem.columnName.value];\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(row:Row) {\n return (mapping?.[String(row[columnId])] ?? DEFAULT_COMMON_AES)?.[field] as ValueType;\n };\n }\n return () => aesItem as ValueType;\n}\n"],"names":["isInheritedAes","v","createAesGetter","legendInfo","aesItem","field","isContinuousAes","domain","range","scale","scaleSqrt","row","type","getContinuousColorScale","DEFAULT_DOT_AES","columnId","mapping","_a","DEFAULT_COMMON_AES"],"mappings":";;;;;;;;;;AAcA,SAASA,EAAeC,GAAgE;AACpF,SAAO,OAAOA,KAAM,YAAYA,MAAM,QAAQ,UAAUA,KAAK,WAAWA,KAAKA,EAAE,SAAS;AAC5F;AACO,SAASC,EACZC,GACAC,GACAC,GACF;AACE,MAAIC,EAA2BF,CAAO,KAAKC,MAAU,WAAW;AAC5D,UAAM,EAAC,QAAAE,GAAQ,OAAAC,EAAAA,IAASJ,GAClBK,IAAoCC,EAAAA,EACrC,OAAOH,CAAM,EACb,MAAMC,CAAiB;AAC5B,WAAO,SAASG,GAAS;AACrB,YAAMV,IAAIQ,EAAM,OAAOE,EAAIP,EAAQ,WAAW,KAAK,CAAC,CAAC;AACrD,aAAO,KAAK,IAAI,GAAGH,CAAW;AAAA,IAClC;AAAA,EACJ;AACA,MAAIK,EAA2BF,CAAO,MAAMC,MAAU,aAAaA,MAAU,cAAc;AACvF,UAAM,EAAC,QAAAE,GAAQ,OAAAC,GAAO,MAAAI,IAAO,SAAA,IAAYR,GACnCK,IAAQI,EAAwBL,GAAmBD,GAAQK,CAAI;AACrE,WAAO,SAASD,GAAS;AACrB,YAAMV,IAAIU,EAAIP,EAAQ,WAAW,KAAK;AACtC,aAAIH,MAAM,OACCa,EAAgB,QAEpBL,EAAM,OAAOR,CAAC,CAAC;AAAA,IAC1B;AAAA,EACJ;AACA,MAAID,EAAeI,CAAO,GAAG;AACzB,UAAMW,IAAWX,EAAQ,OACnBY,IAAUb,EAAWY,CAAQ,EAAE;AACrC,WAAO,SAASJ,GAAS;;AACrB,cAAQM,KAAAD,KAAA,OAAA,SAAAA,EAAU,OAAOL,EAAII,CAAQ,CAAC,CAAA,MAAMG,MAApC,OAAA,SAAAD,EAA0DZ,CAAAA;AAAAA,IACtE;AAAA,EACJ;AACA,SAAO,MAAMD;AACjB;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"createAesGetter.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/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,EAAAA,IAASJ,GAClBK,IAAoCC,EAAAA,EACrC,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,SAAA,IAAYR,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;","x_google_ignoreList":[0]}
@@ -1,46 +1,53 @@
1
- import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS as h } from "../../constants.js";
2
- import m from "../../node_modules/lodash/lodash.js";
3
- function C(n, u, f) {
4
- const c = f ?? {};
5
- return Object.keys(u).length ? n.reduce((a, e, r) => {
6
- if (a[e] || (a[e] = {}), u.dotFill) {
7
- const o = u.dotFill;
8
- a[e].dotFill = o[r % (o == null ? void 0 : o.length)];
1
+ import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS as f } from "../../constants.js";
2
+ const h = /* @__PURE__ */ (() => {
3
+ const e = /* @__PURE__ */ new Map();
4
+ return {
5
+ clear: () => e.clear(),
6
+ getIndex: (s, u) => {
7
+ let l = e.get(s.value);
8
+ l === void 0 && (l = /* @__PURE__ */ new Map(), e.set(s.value, l));
9
+ let n = l.get(u);
10
+ return n === void 0 && (n = l.size, l.set(u, n)), n;
9
11
  }
10
- if (u.lineColor) {
11
- const o = u.lineColor;
12
- a[e].lineColor = o[r % (o == null ? void 0 : o.length)];
13
- }
14
- return a;
15
- }, c) : c;
12
+ };
13
+ })();
14
+ function C(e, s, u) {
15
+ h.clear();
16
+ const l = u && Object.keys(u).length > 0, n = s.dotFill, r = n && n.length > 0, c = s.lineColor, g = c && c.length > 0;
17
+ return (i, a) => {
18
+ var v;
19
+ const t = l ? (v = u[i]) == null ? void 0 : v[a] : void 0;
20
+ return a === "dotFill" && r ? n[h.getIndex(e, i) % n.length] ?? t : a === "lineColor" && g ? c[h.getIndex(e, i) % c.length] ?? t : t;
21
+ };
16
22
  }
17
- function S(n) {
18
- return typeof n == "object" && "type" in n && n.type === "grouping";
23
+ function I(e) {
24
+ return typeof e == "object" && "type" in e && e.type === "grouping";
19
25
  }
20
- function L(n, u, f, c) {
21
- return u.reduce((a, e) => {
22
- const r = (l) => String(l[e.value]), o = (l) => e.valueLabels ? String(l[e.valueLabels]) : r(l), v = /* @__PURE__ */ new Set(), g = {};
23
- f.forEach((l) => {
24
- l.aes && Object.entries(l.aes).forEach(([i, t]) => {
25
- S(t) && t.value === e.value && (v.add(i), t.palette && (g[i] = t.palette));
26
+ function L(e, s, u, l) {
27
+ return s.reduce((n, r) => {
28
+ const c = (t) => r.valueLabels ? e.getColumnValueCategory(r.valueLabels, t) : void 0, g = /* @__PURE__ */ new Set(), i = {};
29
+ u.forEach((t) => {
30
+ t.aes && Object.entries(t.aes).forEach(([d, o]) => {
31
+ I(o) && o.value === r.value && (g.add(d), i[d] = o.palette);
26
32
  });
27
33
  });
28
- let s = {}, d = [];
29
- if (v.has("dotFill")) {
30
- const l = n.getColumnCategories(e.value);
31
- if (l.length > h)
32
- d = l, s = {};
33
- else {
34
- const i = m.uniqBy(n.rows, (t) => t[e.value]);
35
- s = i.reduce((t, p) => (t[r(p)] = o(p), t), {}), d = i.map(r).sort((t, p) => s[t].localeCompare(s[p], "en", { numeric: !0 }));
36
- }
34
+ let a = {}, v = [];
35
+ if (g.has("dotFill") || g.has("dotShape")) {
36
+ const t = e.getColumnCategories(r.value);
37
+ t.length < f ? (a = t.reduce((d, o) => {
38
+ const p = e.getColumnCategoryRowIndex(r.value, o);
39
+ return d[o] = c(p) ?? o, d;
40
+ }, a), v = t.sort((d, o) => {
41
+ var p;
42
+ return ((p = a[d]) == null ? void 0 : p.localeCompare(a[o] ?? "", "en", { numeric: !0 })) ?? 0;
43
+ })) : v = t;
37
44
  }
38
- return a[e.value] = {
39
- values: d,
40
- usedAes: [...v],
41
- aesMap: C(d, g, c[e.value]),
42
- labels: s
43
- }, a;
45
+ return n[r.value] = {
46
+ values: v,
47
+ usedAes: [...g],
48
+ aesMap: C(r, i, l[r.value]),
49
+ labels: a
50
+ }, n;
44
51
  }, {});
45
52
  }
46
53
  export {