@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.
Files changed (351) hide show
  1. package/dist/DataFrame.d.ts +15 -9
  2. package/dist/DataFrame.d.ts.map +1 -1
  3. package/dist/DataFrame.js +105 -81
  4. package/dist/DataFrame.js.map +1 -1
  5. package/dist/bubble/ChartRenderer.d.ts +6 -5
  6. package/dist/bubble/ChartRenderer.d.ts.map +1 -1
  7. package/dist/bubble/ChartRenderer.js +123 -121
  8. package/dist/bubble/ChartRenderer.js.map +1 -1
  9. package/dist/bubble/components/Chart.d.ts +3 -2
  10. package/dist/bubble/components/Chart.d.ts.map +1 -1
  11. package/dist/bubble/components/Chart.js +78 -97
  12. package/dist/bubble/components/Chart.js.map +1 -1
  13. package/dist/bubble/components/ChartsGroup.d.ts +6 -5
  14. package/dist/bubble/components/ChartsGroup.d.ts.map +1 -1
  15. package/dist/bubble/components/ChartsGroup.js +39 -37
  16. package/dist/bubble/components/ChartsGroup.js.map +1 -1
  17. package/dist/bubble/getCellTooltip.d.ts +5 -0
  18. package/dist/bubble/getCellTooltip.d.ts.map +1 -0
  19. package/dist/bubble/getCellTooltip.js +28 -0
  20. package/dist/bubble/getCellTooltip.js.map +1 -0
  21. package/dist/bubble/{getCells.d.ts → getGroupedCellsData.d.ts} +4 -4
  22. package/dist/bubble/getGroupedCellsData.d.ts.map +1 -0
  23. package/dist/bubble/getGroupedCellsData.js +94 -0
  24. package/dist/bubble/getGroupedCellsData.js.map +1 -0
  25. package/dist/bubble/index.d.ts +4 -4
  26. package/dist/bubble/index.d.ts.map +1 -1
  27. package/dist/bubble/index.js +47 -42
  28. package/dist/bubble/index.js.map +1 -1
  29. package/dist/bubble/utils/calculateCaptionTails.d.ts +2 -2
  30. package/dist/bubble/utils/calculateCaptionTails.d.ts.map +1 -1
  31. package/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  32. package/dist/common/Legend.d.ts.map +1 -1
  33. package/dist/common/Legend.js.map +1 -1
  34. package/dist/common/Tooltip.js +1 -1
  35. package/dist/common/Tooltip.js.map +1 -1
  36. package/dist/common/types.d.ts +1 -1
  37. package/dist/common/types.d.ts.map +1 -1
  38. package/dist/common/useDataFrame.d.ts +11 -0
  39. package/dist/common/useDataFrame.d.ts.map +1 -0
  40. package/dist/common/useDataFrame.js +20 -0
  41. package/dist/common/useDataFrame.js.map +1 -0
  42. package/dist/dendro/ChartRenderer.d.ts +9 -8
  43. package/dist/dendro/ChartRenderer.d.ts.map +1 -1
  44. package/dist/dendro/ChartRenderer.js +187 -187
  45. package/dist/dendro/ChartRenderer.js.map +1 -1
  46. package/dist/dendro/components/Chart.d.ts +8 -8
  47. package/dist/dendro/components/Chart.d.ts.map +1 -1
  48. package/dist/dendro/components/Chart.js +35 -35
  49. package/dist/dendro/components/Chart.js.map +1 -1
  50. package/dist/dendro/components/Heatmap.d.ts +3 -3
  51. package/dist/dendro/components/Heatmap.d.ts.map +1 -1
  52. package/dist/dendro/components/Heatmap.js +23 -23
  53. package/dist/dendro/components/Heatmap.js.map +1 -1
  54. package/dist/dendro/components/Legend.d.ts.map +1 -1
  55. package/dist/dendro/components/Legend.js.map +1 -1
  56. package/dist/dendro/components/LinksGroup.d.ts +6 -6
  57. package/dist/dendro/components/LinksGroup.d.ts.map +1 -1
  58. package/dist/dendro/components/LinksGroup.js +17 -17
  59. package/dist/dendro/components/LinksGroup.js.map +1 -1
  60. package/dist/dendro/components/NodesGroup.d.ts +7 -7
  61. package/dist/dendro/components/NodesGroup.d.ts.map +1 -1
  62. package/dist/dendro/components/NodesGroup.js +29 -29
  63. package/dist/dendro/components/NodesGroup.js.map +1 -1
  64. package/dist/dendro/components/types.d.ts +2 -2
  65. package/dist/dendro/components/types.d.ts.map +1 -1
  66. package/dist/dendro/getHeatmapData.d.ts +2 -2
  67. package/dist/dendro/getHeatmapData.d.ts.map +1 -1
  68. package/dist/dendro/getHeatmapData.js +48 -44
  69. package/dist/dendro/getHeatmapData.js.map +1 -1
  70. package/dist/dendro/getHierarchyData.d.ts +3 -3
  71. package/dist/dendro/getHierarchyData.d.ts.map +1 -1
  72. package/dist/dendro/getHierarchyData.js +31 -31
  73. package/dist/dendro/getHierarchyData.js.map +1 -1
  74. package/dist/dendro/index.d.ts +5 -5
  75. package/dist/dendro/index.d.ts.map +1 -1
  76. package/dist/dendro/index.js +86 -89
  77. package/dist/dendro/index.js.map +1 -1
  78. package/dist/discrete/ChartRenderer.d.ts +6 -6
  79. package/dist/discrete/ChartRenderer.d.ts.map +1 -1
  80. package/dist/discrete/ChartRenderer.js +197 -196
  81. package/dist/discrete/ChartRenderer.js.map +1 -1
  82. package/dist/discrete/DiscreteSettingsImpl.d.ts +3 -3
  83. package/dist/discrete/DiscreteSettingsImpl.d.ts.map +1 -1
  84. package/dist/discrete/DiscreteSettingsImpl.js +8 -8
  85. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  86. package/dist/discrete/components/layers/BoxElement.js.map +1 -1
  87. package/dist/discrete/index.d.ts +1 -1
  88. package/dist/discrete/index.d.ts.map +1 -1
  89. package/dist/discrete/index.js +109 -106
  90. package/dist/discrete/index.js.map +1 -1
  91. package/dist/discrete/layers/bar.d.ts +2 -2
  92. package/dist/discrete/layers/bar.d.ts.map +1 -1
  93. package/dist/discrete/layers/bar.js +32 -37
  94. package/dist/discrete/layers/bar.js.map +1 -1
  95. package/dist/discrete/layers/binnedDots.d.ts +3 -3
  96. package/dist/discrete/layers/binnedDots.d.ts.map +1 -1
  97. package/dist/discrete/layers/binnedDots.js +66 -78
  98. package/dist/discrete/layers/binnedDots.js.map +1 -1
  99. package/dist/discrete/layers/boxes.d.ts +3 -4
  100. package/dist/discrete/layers/boxes.d.ts.map +1 -1
  101. package/dist/discrete/layers/boxes.js +59 -60
  102. package/dist/discrete/layers/boxes.js.map +1 -1
  103. package/dist/discrete/layers/dots.d.ts +2 -3
  104. package/dist/discrete/layers/dots.d.ts.map +1 -1
  105. package/dist/discrete/layers/dots.js +30 -30
  106. package/dist/discrete/layers/dots.js.map +1 -1
  107. package/dist/discrete/layers/lines.js +11 -10
  108. package/dist/discrete/layers/lines.js.map +1 -1
  109. package/dist/discrete/layers/logo.d.ts +2 -2
  110. package/dist/discrete/layers/logo.d.ts.map +1 -1
  111. package/dist/discrete/layers/logo.js +21 -21
  112. package/dist/discrete/layers/logo.js.map +1 -1
  113. package/dist/discrete/layers/pairedPoints.d.ts +2 -2
  114. package/dist/discrete/layers/pairedPoints.d.ts.map +1 -1
  115. package/dist/discrete/layers/pairedPoints.js +62 -62
  116. package/dist/discrete/layers/pairedPoints.js.map +1 -1
  117. package/dist/discrete/layers/sina.d.ts +3 -4
  118. package/dist/discrete/layers/sina.d.ts.map +1 -1
  119. package/dist/discrete/layers/sina.js +67 -71
  120. package/dist/discrete/layers/sina.js.map +1 -1
  121. package/dist/discrete/layers/stackedBar.d.ts +1 -1
  122. package/dist/discrete/layers/stackedBar.d.ts.map +1 -1
  123. package/dist/discrete/layers/stackedBar.js +25 -25
  124. package/dist/discrete/layers/stackedBar.js.map +1 -1
  125. package/dist/discrete/layers/violins.js +13 -13
  126. package/dist/discrete/utils/getOutliersBounds.d.ts +1 -1
  127. package/dist/discrete/utils/getOutliersBounds.d.ts.map +1 -1
  128. package/dist/discrete/utils/getOutliersBounds.js +5 -5
  129. package/dist/discrete/utils/getOutliersBounds.js.map +1 -1
  130. package/dist/discrete/utils/splitTextByWidth.js +1 -1
  131. package/dist/discrete/utils/splitTextByWidth.js.map +1 -1
  132. package/dist/heatmap/ChartRenderer.d.ts +7 -6
  133. package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
  134. package/dist/heatmap/ChartRenderer.js +232 -230
  135. package/dist/heatmap/ChartRenderer.js.map +1 -1
  136. package/dist/heatmap/HeatmapSettingsImpl.d.ts +2 -2
  137. package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
  138. package/dist/heatmap/HeatmapSettingsImpl.js +1 -1
  139. package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  140. package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
  141. package/dist/heatmap/components/Annotations/Annotation.js +40 -39
  142. package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  143. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  144. package/dist/heatmap/components/Chart.js +90 -89
  145. package/dist/heatmap/components/Chart.js.map +1 -1
  146. package/dist/heatmap/components/ChartsGroup.d.ts +2 -2
  147. package/dist/heatmap/components/ChartsGroup.d.ts.map +1 -1
  148. package/dist/heatmap/components/ChartsGroup.js +14 -14
  149. package/dist/heatmap/components/ChartsGroup.js.map +1 -1
  150. package/dist/heatmap/components/types.d.ts +3 -2
  151. package/dist/heatmap/components/types.d.ts.map +1 -1
  152. package/dist/heatmap/getCells.d.ts +3 -2
  153. package/dist/heatmap/getCells.d.ts.map +1 -1
  154. package/dist/heatmap/getCells.js +97 -93
  155. package/dist/heatmap/getCells.js.map +1 -1
  156. package/dist/heatmap/index.d.ts +3 -3
  157. package/dist/heatmap/index.d.ts.map +1 -1
  158. package/dist/heatmap/index.js +13 -12
  159. package/dist/heatmap/index.js.map +1 -1
  160. package/dist/heatmap/utils/calculateAnnotationTitleSizes.d.ts.map +1 -1
  161. package/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
  162. package/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
  163. package/dist/heatmap/utils/calculateCaptionTails.d.ts +1 -1
  164. package/dist/heatmap/utils/calculateCaptionTails.d.ts.map +1 -1
  165. package/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  166. package/dist/histogram/ChartRenderer.d.ts +6 -5
  167. package/dist/histogram/ChartRenderer.d.ts.map +1 -1
  168. package/dist/histogram/ChartRenderer.js +154 -153
  169. package/dist/histogram/ChartRenderer.js.map +1 -1
  170. package/dist/histogram/HistogramSettingsImpl.d.ts +2 -2
  171. package/dist/histogram/HistogramSettingsImpl.d.ts.map +1 -1
  172. package/dist/histogram/HistogramSettingsImpl.js.map +1 -1
  173. package/dist/histogram/components/Chart.js +48 -48
  174. package/dist/histogram/components/Chart.js.map +1 -1
  175. package/dist/histogram/components/types.d.ts +4 -3
  176. package/dist/histogram/components/types.d.ts.map +1 -1
  177. package/dist/histogram/getHistogramData.d.ts +7 -7
  178. package/dist/histogram/getHistogramData.d.ts.map +1 -1
  179. package/dist/histogram/getHistogramData.js +52 -53
  180. package/dist/histogram/getHistogramData.js.map +1 -1
  181. package/dist/histogram/index.d.ts +3 -3
  182. package/dist/histogram/index.d.ts.map +1 -1
  183. package/dist/histogram/index.js +49 -45
  184. package/dist/histogram/index.js.map +1 -1
  185. package/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +10 -10
  186. package/dist/node_modules/d3-array/src/min.js +5 -11
  187. package/dist/node_modules/d3-array/src/min.js.map +1 -1
  188. package/dist/node_modules/d3-shape/src/area.js +30 -30
  189. package/dist/node_modules/d3-shape/src/line.js +6 -6
  190. package/dist/node_modules/d3-shape/src/line.js.map +1 -1
  191. package/dist/node_modules/kdbush/index.js +148 -0
  192. package/dist/node_modules/kdbush/index.js.map +1 -0
  193. package/dist/scatterplot/ChartRenderer.d.ts +7 -6
  194. package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
  195. package/dist/scatterplot/ChartRenderer.js +213 -209
  196. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  197. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +2 -2
  198. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
  199. package/dist/scatterplot/ScatterplotSettingsImpl.js +28 -28
  200. package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  201. package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -1
  202. package/dist/scatterplot/components/ChartAxisTitles.js +31 -30
  203. package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
  204. package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
  205. package/dist/scatterplot/components/ChartLayersData.js +138 -156
  206. package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  207. package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -1
  208. package/dist/scatterplot/components/ChartTooltip.js +41 -38
  209. package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  210. package/dist/scatterplot/components/ChartTrendsData.js +21 -21
  211. package/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  212. package/dist/scatterplot/components/types.d.ts +7 -7
  213. package/dist/scatterplot/components/types.d.ts.map +1 -1
  214. package/dist/scatterplot/constants.d.ts +1 -1
  215. package/dist/scatterplot/constants.d.ts.map +1 -1
  216. package/dist/scatterplot/constants.js.map +1 -1
  217. package/dist/scatterplot/dots.d.ts +2 -2
  218. package/dist/scatterplot/dots.d.ts.map +1 -1
  219. package/dist/scatterplot/dots.js +27 -25
  220. package/dist/scatterplot/dots.js.map +1 -1
  221. package/dist/scatterplot/getLayersData.d.ts +3 -3
  222. package/dist/scatterplot/getLayersData.d.ts.map +1 -1
  223. package/dist/scatterplot/getLayersData.js +12 -15
  224. package/dist/scatterplot/getLayersData.js.map +1 -1
  225. package/dist/scatterplot/index.d.ts +4 -4
  226. package/dist/scatterplot/index.d.ts.map +1 -1
  227. package/dist/scatterplot/index.js +71 -72
  228. package/dist/scatterplot/index.js.map +1 -1
  229. package/dist/scatterplot/linearRegression.d.ts +5 -4
  230. package/dist/scatterplot/linearRegression.d.ts.map +1 -1
  231. package/dist/scatterplot/linearRegression.js +88 -86
  232. package/dist/scatterplot/linearRegression.js.map +1 -1
  233. package/dist/scatterplot/utils/createAesGetter.d.ts +3 -2
  234. package/dist/scatterplot/utils/createAesGetter.d.ts.map +1 -1
  235. package/dist/scatterplot/utils/createAesGetter.js +21 -21
  236. package/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  237. package/dist/scatterplot/utils/createLegendInfo.d.ts +2 -10
  238. package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
  239. package/dist/scatterplot/utils/createLegendInfo.js +44 -37
  240. package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  241. package/dist/scatterplot/utils/formatColumnValue.d.ts +5 -0
  242. package/dist/scatterplot/utils/formatColumnValue.d.ts.map +1 -0
  243. package/dist/scatterplot/utils/formatColumnValue.js +11 -0
  244. package/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
  245. package/dist/scatterplot/utils/getVisibleLabels.d.ts +6 -9
  246. package/dist/scatterplot/utils/getVisibleLabels.d.ts.map +1 -1
  247. package/dist/scatterplot/utils/getVisibleLabels.js +46 -56
  248. package/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
  249. package/dist/scatterplot-umap/ChartRenderer.d.ts +18 -15
  250. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  251. package/dist/scatterplot-umap/ChartRenderer.js +231 -214
  252. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  253. package/dist/scatterplot-umap/SettingsImpl.d.ts +2 -2
  254. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  255. package/dist/scatterplot-umap/SettingsImpl.js +25 -25
  256. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  257. package/dist/scatterplot-umap/colors.d.ts +6 -0
  258. package/dist/scatterplot-umap/colors.d.ts.map +1 -0
  259. package/dist/scatterplot-umap/colors.js +42 -0
  260. package/dist/scatterplot-umap/colors.js.map +1 -0
  261. package/dist/scatterplot-umap/components/LowerSVG.d.ts +2 -2
  262. package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
  263. package/dist/scatterplot-umap/components/LowerSVG.js +97 -94
  264. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  265. package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
  266. package/dist/scatterplot-umap/components/UpperSVG.js +20 -19
  267. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  268. package/dist/scatterplot-umap/index.d.ts +0 -2
  269. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  270. package/dist/scatterplot-umap/index.js +77 -102
  271. package/dist/scatterplot-umap/index.js.map +1 -1
  272. package/dist/scatterplot-umap/types.d.ts +7 -10
  273. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  274. package/dist/types/bubble.d.ts +44 -12
  275. package/dist/types/bubble.d.ts.map +1 -1
  276. package/dist/types/common.d.ts +22 -3
  277. package/dist/types/common.d.ts.map +1 -1
  278. package/dist/types/common.js +3 -1
  279. package/dist/types/common.js.map +1 -1
  280. package/dist/types/dendro.d.ts +113 -10
  281. package/dist/types/dendro.d.ts.map +1 -1
  282. package/dist/types/dendro.js +1 -1
  283. package/dist/types/dendro.js.map +1 -1
  284. package/dist/types/discrete.d.ts +99 -22
  285. package/dist/types/discrete.d.ts.map +1 -1
  286. package/dist/types/discrete.js +3 -3
  287. package/dist/types/discrete.js.map +1 -1
  288. package/dist/types/heatmap.d.ts +187 -28
  289. package/dist/types/heatmap.d.ts.map +1 -1
  290. package/dist/types/heatmap.js +1 -1
  291. package/dist/types/heatmap.js.map +1 -1
  292. package/dist/types/histogram.d.ts +30 -8
  293. package/dist/types/histogram.d.ts.map +1 -1
  294. package/dist/types/histogram.js +1 -1
  295. package/dist/types/histogram.js.map +1 -1
  296. package/dist/types/scatterplot-umap.d.ts +149 -15
  297. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  298. package/dist/types/scatterplot-umap.js +9 -9
  299. package/dist/types/scatterplot-umap.js.map +1 -1
  300. package/dist/types/scatterplot.d.ts +164 -12
  301. package/dist/types/scatterplot.d.ts.map +1 -1
  302. package/dist/types/scatterplot.js +1 -1
  303. package/dist/types/scatterplot.js.map +1 -1
  304. package/dist/utils/TextMeasurer/TextMeasurer.d.ts +7 -0
  305. package/dist/utils/TextMeasurer/TextMeasurer.d.ts.map +1 -0
  306. package/dist/utils/TextMeasurer/TextMeasurer.js +42 -0
  307. package/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
  308. package/dist/utils/TextMeasurer/charToWidth.json.js +155 -0
  309. package/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
  310. package/dist/utils/arrangeLegendParts.js +1 -1
  311. package/dist/utils/arrangeLegendParts.js.map +1 -1
  312. package/dist/utils/getChartEdgeSides.d.ts +1 -1
  313. package/dist/utils/getLegendWidth.d.ts.map +1 -1
  314. package/dist/utils/getLegendWidth.js +1 -1
  315. package/dist/utils/getLegendWidth.js.map +1 -1
  316. package/package.json +5 -3
  317. package/dist/bubble/getCells.d.ts.map +0 -1
  318. package/dist/bubble/getCells.js +0 -91
  319. package/dist/bubble/getCells.js.map +0 -1
  320. package/dist/node_modules/d3-quadtree/src/add.js +0 -30
  321. package/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
  322. package/dist/node_modules/d3-quadtree/src/cover.js +0 -29
  323. package/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
  324. package/dist/node_modules/d3-quadtree/src/data.js +0 -12
  325. package/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
  326. package/dist/node_modules/d3-quadtree/src/extent.js +0 -7
  327. package/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
  328. package/dist/node_modules/d3-quadtree/src/find.js +0 -26
  329. package/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
  330. package/dist/node_modules/d3-quadtree/src/quad.js +0 -7
  331. package/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
  332. package/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
  333. package/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
  334. package/dist/node_modules/d3-quadtree/src/remove.js +0 -21
  335. package/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
  336. package/dist/node_modules/d3-quadtree/src/root.js +0 -7
  337. package/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
  338. package/dist/node_modules/d3-quadtree/src/size.js +0 -12
  339. package/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
  340. package/dist/node_modules/d3-quadtree/src/visit.js +0 -14
  341. package/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
  342. package/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
  343. package/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
  344. package/dist/node_modules/d3-quadtree/src/x.js +0 -11
  345. package/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
  346. package/dist/node_modules/d3-quadtree/src/y.js +0 -11
  347. package/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
  348. package/dist/utils/TextMeasurer.d.ts +0 -8
  349. package/dist/utils/TextMeasurer.d.ts.map +0 -1
  350. package/dist/utils/TextMeasurer.js +0 -27
  351. package/dist/utils/TextMeasurer.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { GroupKey, NO_GROUPED, DataFrame } from '../../DataFrame';
1
+ import { DataFrame, GroupKey, NO_GROUPED, RowIndex } from '../../DataFrame';
2
+ import { ColumnName, DataValue } from '../../types';
2
3
  import { BinnedDotsLayer, DiscreteSettingsImpl } from '../DiscreteSettingsImpl';
3
4
  import { BinnedDotsData } from './types';
4
- import { ColumnName, DataValue, Row } from '../../types';
5
5
  export declare class BinnedDots {
6
6
  bins: {
7
7
  x: number;
@@ -18,7 +18,7 @@ export declare class BinnedDots {
18
18
  min: number;
19
19
  max: number;
20
20
  };
21
- constructor(valueRows: Row[], valueColumn: string, primaryGrouping: DataValue | typeof NO_GROUPED, secondaryGrouping: DataValue | typeof NO_GROUPED, step: number, convertToScale: (v: number) => number, convertFromScale: (v: number) => number, yGetter: (r: Row) => number, scale: 'log' | 'linear', keyColumn: ColumnName | null);
21
+ constructor(dataFrame: DataFrame, indexes: RowIndex[], column: ColumnName, primaryGrouping: DataValue | typeof NO_GROUPED, secondaryGrouping: DataValue | typeof NO_GROUPED, step: number, convertToScale: (v: number) => number, convertFromScale: (v: number) => number, scale: 'log' | 'linear', keyColumn: ColumnName | null);
22
22
  }
23
23
  export declare function getBinnedDotsData(layer: BinnedDotsLayer, groupingKeys: {
24
24
  facet: GroupKey[][];
@@ -1 +1 @@
1
- {"version":3,"file":"binnedDots.d.ts","sourceRoot":"","sources":["../../../src/discrete/layers/binnedDots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,aAAa,CAAC;AAmD5D,qBAAa,UAAU;IACnB,IAAI,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,EAAE,CAAA;KAAC,EAAE,CAAC;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;gBAGE,SAAS,EAAE,GAAG,EAAE,EAChB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,SAAS,GAAG,OAAO,UAAU,EAC9C,iBAAiB,EAAE,SAAS,GAAI,OAAO,UAAU,EACjD,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACrC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACvC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,EAC3B,KAAK,EAAE,KAAK,GAAG,QAAQ,EACvB,SAAS,EAAE,UAAU,GAAG,IAAI;CAwBnC;AAED,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE;IACV,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB,EACD,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAC5B,KAAK,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GACtD,cAAc,CAyEhB"}
1
+ {"version":3,"file":"binnedDots.d.ts","sourceRoot":"","sources":["../../../src/discrete/layers/binnedDots.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA8C9C,qBAAa,UAAU;IACnB,IAAI,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,EAAE,CAAA;KAAC,EAAE,CAAC;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;gBAGE,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,QAAQ,EAAE,EACnB,MAAM,EAAE,UAAU,EAClB,eAAe,EAAE,SAAS,GAAG,OAAO,UAAU,EAC9C,iBAAiB,EAAE,SAAS,GAAI,OAAO,UAAU,EACjD,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACrC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACvC,KAAK,EAAE,KAAK,GAAG,QAAQ,EACvB,SAAS,EAAE,UAAU,GAAG,IAAI;CAyBnC;AAED,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE;IACV,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB,EACD,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAC5B,KAAK,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GACtD,cAAc,CAwEhB"}
@@ -1,106 +1,94 @@
1
- var N = Object.defineProperty;
2
- var R = (e, o, u) => o in e ? N(e, o, { enumerable: !0, configurable: !0, writable: !0, value: u }) : e[o] = u;
3
- var b = (e, o, u) => R(e, typeof o != "symbol" ? o + "" : o, u);
4
- import { getOutliersBounds as k } from "../utils/getOutliersBounds.js";
5
- import { getFacetStringKey as S } from "../utils/getFacetStringKey.js";
6
- import _ from "../../node_modules/d3-array/src/extent.js";
7
- const B = 30;
8
- function $(e, o, u, a, c, f) {
9
- const i = e.map((n) => u(c(n))), r = e.length, l = e.map(d), h = [];
10
- function d(n, m) {
11
- return { key: f(n, m), value: c(n) };
12
- }
13
- let s = 0;
14
- for (let n = 1; n < r; ++n) {
15
- const m = i[s], D = i[n], t = i[n - 1];
16
- if (D >= m + o) {
17
- const g = Math.min((m + t) / 2, D - o);
18
- i.fill(g, s, n), h.push({
19
- x: a(g),
20
- count: n - s,
21
- dots: l.slice(s, n)
22
- }), s = n;
1
+ var k = Object.defineProperty;
2
+ var v = (r, o, i) => o in r ? k(r, o, { enumerable: !0, configurable: !0, writable: !0, value: i }) : r[o] = i;
3
+ var b = (r, o, i) => v(r, typeof o != "symbol" ? o + "" : o, i);
4
+ import { getOutliersBounds as F } from "../utils/getOutliersBounds.js";
5
+ import "../../utils/TextMeasurer/TextMeasurer.js";
6
+ import { getFacetStringKey as N } from "../utils/getFacetStringKey.js";
7
+ import S from "../../node_modules/d3-array/src/extent.js";
8
+ const M = 30;
9
+ function _(r, o, i, c, a, g) {
10
+ const u = r.map(a).map(i), s = r.length, h = r.map((t) => ({ key: g(t), value: a(t) })), m = [];
11
+ let e = 0;
12
+ for (let t = 1; t < s; ++t) {
13
+ const f = u[e], d = u[t], l = u[t - 1];
14
+ if (d >= f + o) {
15
+ const n = Math.min((f + l) / 2, d - o);
16
+ u.fill(n, e, t), m.push({
17
+ x: c(n),
18
+ count: t - e,
19
+ dots: h.slice(e, t)
20
+ }), e = t;
23
21
  }
24
22
  }
25
- return i.fill((i[s] + i[r - 1]) / 2, s, r), h.push({
26
- x: a((i[s] + i[r - 1]) / 2),
27
- count: r - s,
28
- dots: l.slice(s, r)
29
- }), h;
23
+ return u.fill((u[e] + u[s - 1]) / 2, e, s), m.push({
24
+ x: c((u[e] + u[s - 1]) / 2),
25
+ count: s - e,
26
+ dots: h.slice(e, s)
27
+ }), m;
30
28
  }
31
- class E {
32
- constructor(o, u, a, c, f, i, r, l, h, d) {
29
+ class $ {
30
+ constructor(o, i, c, a, g, u, s, h, m, e) {
33
31
  b(this, "bins");
34
32
  b(this, "primaryGrouping");
35
33
  b(this, "secondaryGrouping");
36
34
  b(this, "key");
37
35
  b(this, "boundsY");
38
- this.primaryGrouping = String(a), this.secondaryGrouping = String(c), this.key = `binnedDots_${this.primaryGrouping}_${this.secondaryGrouping}`;
39
- const s = o.filter((n) => l(n) === 0 && h === "log" ? (console.warn(`Item with ${u} = 0 is not shown on chart with log scale`), !1) : !0).sort((n, m) => i(l(n)) - i(l(m)));
40
- this.bins = $(
41
- s,
42
- f,
43
- i,
44
- r,
45
- l,
46
- (n, m) => String(d ? n[d.value] : m)
47
- ), this.boundsY = {
36
+ this.primaryGrouping = String(a), this.secondaryGrouping = String(g), this.key = `binnedDots_${this.primaryGrouping}_${this.secondaryGrouping}`;
37
+ const t = (l) => Number(o.getColumnValue(c.value, l)), f = (l) => String(e ? o.getColumnValue(e.value, l) : l), d = i.filter((l) => t(l) === 0 && m === "log" ? (console.warn(`Item with ${c.value} = 0 is not shown on chart with log scale`), !1) : !0).sort((l, n) => s(t(l)) - s(t(n)));
38
+ this.bins = _(d, u, s, h, t, f), this.boundsY = {
48
39
  min: this.bins[0].x,
49
40
  max: this.bins[this.bins.length - 1].x
50
41
  };
51
42
  }
52
43
  }
53
- function P(e, o, u, a, c) {
54
- const f = (t) => c.scale === "log" ? Math.log10(t) : t, i = (t) => c.scale === "log" ? Math.pow(10, t) : t, r = (t) => Number(t[a.value]);
55
- let l = 1 / 0, h = -1 / 0;
56
- const d = u.getRowsByGrouping([]), [s = r(d[0]), n = r(d[0])] = _(
57
- d.filter((t) => Number(t[a.value]) === 0 && c.scale === "log" ? (console.warn(`Item with ${a.value} = 0 is not shown on chart with log scale`), !1) : !0),
58
- (t) => Number(t[a.value])
59
- ), m = Math.abs(f(s) - f(n)) / B;
44
+ function U(r, o, i, c, a) {
45
+ const g = (n) => a.scale === "log" ? Math.log10(n) : n, u = (n) => a.scale === "log" ? Math.pow(10, n) : n, s = (n) => Number(i.getColumnValue(c.value, n));
46
+ let h = 1 / 0, m = -1 / 0;
47
+ const e = i.getRowsByGrouping([]), [t = s(e[0]), f = s(e[0])] = S(
48
+ e.filter((n) => s(n) === 0 && a.scale === "log" ? (console.warn(`Item with ${c.value} = 0 is not shown on chart with log scale`), !1) : !0),
49
+ s
50
+ ), d = Math.abs(g(t) - g(f)) / M;
60
51
  return {
61
52
  type: "binnedDots",
62
- geoms: o.facet.reduce((t, g) => {
63
- const x = S(g);
64
- return t[x] = [], o.primary.forEach((Y) => {
65
- o.secondary.forEach((G) => {
66
- const w = u.getRowsByGrouping([...g, Y, G]);
67
- if (!w.length)
53
+ geoms: o.facet.reduce((n, G) => {
54
+ const D = N(G);
55
+ return n[D] = [], o.primary.forEach((Y) => {
56
+ o.secondary.forEach((x) => {
57
+ const y = i.getRowsByGrouping([...G, Y, x]);
58
+ if (!y.length)
68
59
  return;
69
- let M = w;
70
- if (!e.aes.showOutliers) {
71
- const [C, F] = k(w, c.scale, r);
72
- M = w.filter((I) => {
73
- const v = r(I);
74
- return v >= C && v <= F;
75
- });
60
+ let w = Array.from(y);
61
+ if (!r.aes.showOutliers) {
62
+ const [I, B] = F(w, a.scale);
63
+ w = w.filter((C) => s(C) >= I && s(C) <= B);
76
64
  }
77
- const p = new E(
78
- M,
79
- a.value,
80
- Y,
81
- G,
82
- m,
83
- f,
65
+ const p = new $(
84
66
  i,
85
- r,
86
- c.scale,
87
- e.keyColumn
67
+ w,
68
+ c,
69
+ Y,
70
+ x,
71
+ d,
72
+ g,
73
+ u,
74
+ a.scale,
75
+ r.keyColumn
88
76
  );
89
- p.boundsY.min < l && (l = p.boundsY.min), p.boundsY.max > h && (h = p.boundsY.max), t[x].push(p);
77
+ p.boundsY.min < h && (h = p.boundsY.min), p.boundsY.max > m && (m = p.boundsY.max), n[D].push(p);
90
78
  });
91
- }), t;
79
+ }), n;
92
80
  }, {}),
93
81
  meta: {
94
- minY: Math.min(s, n, l),
95
- maxY: Math.max(s, n, h),
96
- binsCount: B,
97
- hasKeyFromColumn: e.keyColumn !== null
82
+ minY: Math.min(t, f, h),
83
+ maxY: Math.max(t, f, m),
84
+ binsCount: M,
85
+ hasKeyFromColumn: r.keyColumn !== null
98
86
  },
99
- aes: e.aes
87
+ aes: r.aes
100
88
  };
101
89
  }
102
90
  export {
103
- E as BinnedDots,
104
- P as getBinnedDotsData
91
+ $ as BinnedDots,
92
+ U as getBinnedDotsData
105
93
  };
106
94
  //# sourceMappingURL=binnedDots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binnedDots.js","sources":["../../../src/discrete/layers/binnedDots.ts"],"sourcesContent":["import type {GroupKey, NO_GROUPED} from '../../DataFrame';\nimport type {DataFrame} from '../../DataFrame';\nimport type {BinnedDotsLayer} from '../DiscreteSettingsImpl';\nimport type {DiscreteSettingsImpl} from '../DiscreteSettingsImpl';\nimport type {BinnedDotsData} from './types';\nimport {getOutliersBounds} from '../utils';\nimport {getFacetStringKey} from '../utils/getFacetStringKey';\nimport type {ColumnName, DataValue, Row} from '../../types';\nimport {extent} from 'd3-array';\n\nconst DEFAULT_BINS_COUNT = 30;\n\nfunction dotbin(\n data: Row[],\n step: number,\n convertToScale: (v: number) => number,\n convertFromScale: (v: number) => number,\n valueGetter: (row: Row) => number,\n keyGetter: (row: Row, idx: number) => string\n) {\n const x = data.map(r => convertToScale(valueGetter(r))); // make a protective copy\n const n = data.length;\n const dotData = data.map(getDotData);\n const result: {x: number; count: number; dots: {key: string; value: number}[]}[] = [];\n\n function getDotData(row: Row, idx: number) {\n return {key: keyGetter(row, idx), value: valueGetter(row)};\n }\n\n let left = 0; // left index of the current bin\n\n // scan from left, group points less than one step away\n for (let j = 1; j < n; ++j) {\n const scaledLeft = x[left];\n const scaledCurrent = x[j];\n const scaledPrev = x[j - 1];\n if (scaledCurrent >= scaledLeft + step) {\n // use span mid-point, unless that could cause overlap\n const xmid = Math.min((scaledLeft + scaledPrev) / 2, scaledCurrent - step);\n x.fill(xmid, left, j);\n result.push({\n x: convertFromScale(xmid),\n count: j - left,\n dots: dotData.slice(left, j),\n });\n left = j;\n }\n }\n x.fill((x[left] + x[n - 1]) / 2, left, n);\n result.push({\n x: convertFromScale((x[left] + x[n - 1]) / 2),\n count: n - left,\n dots: dotData.slice(left, n),\n });\n\n return result;\n}\n\nexport class BinnedDots {\n bins: {x: number; count: number; dots: {key: string; value: number}[]}[];\n primaryGrouping: string;\n secondaryGrouping: string;\n key: string;\n\n boundsY: {\n min: number;\n max: number;\n };\n\n constructor(\n valueRows: Row[],\n valueColumn: string,\n primaryGrouping: DataValue | typeof NO_GROUPED,\n secondaryGrouping: DataValue | typeof NO_GROUPED,\n step: number,\n convertToScale: (v: number) => number,\n convertFromScale: (v: number) => number,\n yGetter: (r: Row) => number,\n scale: 'log' | 'linear',\n keyColumn: ColumnName | null\n ) {\n this.primaryGrouping = String(primaryGrouping);\n this.secondaryGrouping = String(secondaryGrouping);\n this.key = `binnedDots_${this.primaryGrouping}_${this.secondaryGrouping}`;\n\n const sortedGroup = valueRows\n .filter(row => {\n if (yGetter(row) === 0 && scale === 'log') {\n console.warn(`Item with ${valueColumn} = 0 is not shown on chart with log scale`);\n return false;\n }\n return true;\n })\n .sort((a, b) => convertToScale(yGetter(a)) - convertToScale(yGetter(b)));\n\n this.bins = dotbin(sortedGroup, step, convertToScale, convertFromScale, yGetter, (row: Row, idx: number) =>\n String(keyColumn ? row[keyColumn.value] : idx)\n );\n this.boundsY = {\n min: this.bins[0].x,\n max: this.bins[this.bins.length - 1].x,\n };\n }\n}\n\nexport function getBinnedDotsData(\n layer: BinnedDotsLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: DiscreteSettingsImpl['y'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis']\n): BinnedDotsData {\n const convertToScale = (v: number) => (yAxis.scale === 'log' ? Math.log10(v) : v);\n const convertFromScale = (v: number) => (yAxis.scale === 'log' ? Math.pow(10, v) : v);\n const yGetter = (row: Row) => Number(row[y.value]);\n let minY = Infinity;\n let maxY = -Infinity;\n\n const allRows = data.getRowsByGrouping([]);\n const [bound1 = yGetter(allRows[0]), bound2 = yGetter(allRows[0])] = extent(\n allRows.filter(row => {\n if (Number(row[y.value]) === 0 && yAxis.scale === 'log') {\n console.warn(`Item with ${y.value} = 0 is not shown on chart with log scale`);\n return false;\n }\n return true;\n }),\n row => Number(row[y.value])\n );\n const step = Math.abs(convertToScale(bound1) - convertToScale(bound2)) / DEFAULT_BINS_COUNT;\n\n const binnedDotsGroups = groupingKeys.facet.reduce((res: Record<string, BinnedDots[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n groupingKeys.secondary.forEach(secondaryKey => {\n const valueRows = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!valueRows.length) {\n return;\n }\n let valueRowsFiltered = valueRows;\n if (!layer.aes.showOutliers) {\n const [boundsMin, boundMax] = getOutliersBounds(valueRows, yAxis.scale, yGetter);\n valueRowsFiltered = valueRows.filter((row: Row) => {\n const value = yGetter(row);\n return value >= boundsMin && value <= boundMax;\n });\n }\n const binnedDots = new BinnedDots(\n valueRowsFiltered,\n y.value,\n primaryKey,\n secondaryKey,\n step,\n convertToScale,\n convertFromScale,\n yGetter,\n yAxis.scale,\n layer.keyColumn\n );\n\n if (binnedDots.boundsY.min < minY) {\n minY = binnedDots.boundsY.min;\n }\n if (binnedDots.boundsY.max > maxY) {\n maxY = binnedDots.boundsY.max;\n }\n res[strFacetKey].push(binnedDots);\n });\n });\n return res;\n }, {});\n\n return {\n type: 'binnedDots',\n geoms: binnedDotsGroups,\n meta: {\n minY: Math.min(bound1, bound2, minY),\n maxY: Math.max(bound1, bound2, maxY),\n binsCount: DEFAULT_BINS_COUNT,\n hasKeyFromColumn: layer.keyColumn !== null,\n },\n aes: layer.aes,\n };\n}\n"],"names":["DEFAULT_BINS_COUNT","dotbin","data","step","convertToScale","convertFromScale","valueGetter","keyGetter","x","r","n","dotData","getDotData","result","row","idx","left","j","scaledLeft","scaledCurrent","scaledPrev","xmid","BinnedDots","valueRows","valueColumn","primaryGrouping","secondaryGrouping","yGetter","scale","keyColumn","__publicField","sortedGroup","a","b","getBinnedDotsData","layer","groupingKeys","y","yAxis","v","minY","maxY","allRows","bound1","bound2","extent","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","secondaryKey","valueRowsFiltered","boundsMin","boundMax","getOutliersBounds","value","binnedDots"],"mappings":";;;;;;AAUA,MAAMA,IAAqB;AAE3B,SAASC,EACLC,GACAC,GACAC,GACAC,GACAC,GACAC,GACF;AACE,QAAMC,IAAIN,EAAK,IAAI,CAAAO,MAAKL,EAAeE,EAAYG,CAAC,CAAC,CAAC,GAChDC,IAAIR,EAAK,QACTS,IAAUT,EAAK,IAAIU,CAAU,GAC7BC,IAA6E,CAAA;AAEnF,WAASD,EAAWE,GAAUC,GAAa;AACvC,WAAO,EAAC,KAAKR,EAAUO,GAAKC,CAAG,GAAG,OAAOT,EAAYQ,CAAG,EAAA;AAAA,EAC5D;AAEA,MAAIE,IAAO;AAGX,WAASC,IAAI,GAAGA,IAAIP,GAAG,EAAEO,GAAG;AACxB,UAAMC,IAAaV,EAAEQ,CAAI,GACnBG,IAAgBX,EAAES,CAAC,GACnBG,IAAaZ,EAAES,IAAI,CAAC;AAC1B,QAAIE,KAAiBD,IAAaf,GAAM;AAEpC,YAAMkB,IAAO,KAAK,KAAKH,IAAaE,KAAc,GAAGD,IAAgBhB,CAAI;AACzE,MAAAK,EAAE,KAAKa,GAAML,GAAMC,CAAC,GACpBJ,EAAO,KAAK;AAAA,QACR,GAAGR,EAAiBgB,CAAI;AAAA,QACxB,OAAOJ,IAAID;AAAA,QACX,MAAML,EAAQ,MAAMK,GAAMC,CAAC;AAAA,MAAA,CAC9B,GACDD,IAAOC;AAAA,IACX;AAAA,EACJ;AACA,SAAAT,EAAE,MAAMA,EAAEQ,CAAI,IAAIR,EAAEE,IAAI,CAAC,KAAK,GAAGM,GAAMN,CAAC,GACxCG,EAAO,KAAK;AAAA,IACR,GAAGR,GAAkBG,EAAEQ,CAAI,IAAIR,EAAEE,IAAI,CAAC,KAAK,CAAC;AAAA,IAC5C,OAAOA,IAAIM;AAAA,IACX,MAAML,EAAQ,MAAMK,GAAMN,CAAC;AAAA,EAAA,CAC9B,GAEMG;AACX;AAEO,MAAMS,EAAW;AAAA,EAWpB,YACIC,GACAC,GACAC,GACAC,GACAvB,GACAC,GACAC,GACAsB,GACAC,GACAC,GACF;AArBF,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEA,IAAAA,EAAA;AAiBI,SAAK,kBAAkB,OAAOL,CAAe,GAC7C,KAAK,oBAAoB,OAAOC,CAAiB,GACjD,KAAK,MAAM,cAAc,KAAK,eAAe,IAAI,KAAK,iBAAiB;AAEvE,UAAMK,IAAcR,EACf,OAAO,CAAAT,MACAa,EAAQb,CAAG,MAAM,KAAKc,MAAU,SAChC,QAAQ,KAAK,aAAaJ,CAAW,2CAA2C,GACzE,MAEJ,EACV,EACA,KAAK,CAACQ,GAAGC,MAAM7B,EAAeuB,EAAQK,CAAC,CAAC,IAAI5B,EAAeuB,EAAQM,CAAC,CAAC,CAAC;AAE3E,SAAK,OAAOhC;AAAA,MAAO8B;AAAA,MAAa5B;AAAA,MAAMC;AAAA,MAAgBC;AAAA,MAAkBsB;AAAA,MAAS,CAACb,GAAUC,MACxF,OAAOc,IAAYf,EAAIe,EAAU,KAAK,IAAId,CAAG;AAAA,IAAA,GAEjD,KAAK,UAAU;AAAA,MACX,KAAK,KAAK,KAAK,CAAC,EAAE;AAAA,MAClB,KAAK,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE;AAAA,IAAA;AAAA,EAE7C;AACJ;AAEO,SAASmB,EACZC,GACAC,GAKAlC,GACAmC,GACAC,GACc;AACd,QAAMlC,IAAiB,CAACmC,MAAeD,EAAM,UAAU,QAAQ,KAAK,MAAMC,CAAC,IAAIA,GACzElC,IAAmB,CAACkC,MAAeD,EAAM,UAAU,QAAQ,KAAK,IAAI,IAAIC,CAAC,IAAIA,GAC7EZ,IAAU,CAACb,MAAa,OAAOA,EAAIuB,EAAE,KAAK,CAAC;AACjD,MAAIG,IAAO,OACPC,IAAO;AAEX,QAAMC,IAAUxC,EAAK,kBAAkB,EAAE,GACnC,CAACyC,IAAShB,EAAQe,EAAQ,CAAC,CAAC,GAAGE,IAASjB,EAAQe,EAAQ,CAAC,CAAC,CAAC,IAAIG;AAAA,IACjEH,EAAQ,OAAO,CAAA5B,MACP,OAAOA,EAAIuB,EAAE,KAAK,CAAC,MAAM,KAAKC,EAAM,UAAU,SAC9C,QAAQ,KAAK,aAAaD,EAAE,KAAK,2CAA2C,GACrE,MAEJ,EACV;AAAA,IACD,CAAAvB,MAAO,OAAOA,EAAIuB,EAAE,KAAK,CAAC;AAAA,EAAA,GAExBlC,IAAO,KAAK,IAAIC,EAAeuC,CAAM,IAAIvC,EAAewC,CAAM,CAAC,IAAI5C;AA4CzE,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OA5CqBoC,EAAa,MAAM,OAAO,CAACU,GAAmCC,MAAa;AAChG,YAAMC,IAAcC,EAAkBF,CAAQ;AAC9C,aAAAD,EAAIE,CAAW,IAAI,CAAA,GACnBZ,EAAa,QAAQ,QAAQ,CAAAc,MAAc;AACvC,QAAAd,EAAa,UAAU,QAAQ,CAAAe,MAAgB;AAC3C,gBAAM5B,IAAYrB,EAAK,kBAAkB,CAAC,GAAG6C,GAAUG,GAAYC,CAAY,CAAC;AAChF,cAAI,CAAC5B,EAAU;AACX;AAEJ,cAAI6B,IAAoB7B;AACxB,cAAI,CAACY,EAAM,IAAI,cAAc;AACzB,kBAAM,CAACkB,GAAWC,CAAQ,IAAIC,EAAkBhC,GAAWe,EAAM,OAAOX,CAAO;AAC/E,YAAAyB,IAAoB7B,EAAU,OAAO,CAACT,MAAa;AAC/C,oBAAM0C,IAAQ7B,EAAQb,CAAG;AACzB,qBAAO0C,KAASH,KAAaG,KAASF;AAAA,YAC1C,CAAC;AAAA,UACL;AACA,gBAAMG,IAAa,IAAInC;AAAA,YACnB8B;AAAA,YACAf,EAAE;AAAA,YACFa;AAAA,YACAC;AAAA,YACAhD;AAAA,YACAC;AAAA,YACAC;AAAA,YACAsB;AAAA,YACAW,EAAM;AAAA,YACNH,EAAM;AAAA,UAAA;AAGV,UAAIsB,EAAW,QAAQ,MAAMjB,MACzBA,IAAOiB,EAAW,QAAQ,MAE1BA,EAAW,QAAQ,MAAMhB,MACzBA,IAAOgB,EAAW,QAAQ,MAE9BX,EAAIE,CAAW,EAAE,KAAKS,CAAU;AAAA,QACpC,CAAC;AAAA,MACL,CAAC,GACMX;AAAA,IACX,GAAG,CAAA,CAAE;AAAA,IAKD,MAAM;AAAA,MACF,MAAM,KAAK,IAAIH,GAAQC,GAAQJ,CAAI;AAAA,MACnC,MAAM,KAAK,IAAIG,GAAQC,GAAQH,CAAI;AAAA,MACnC,WAAWzC;AAAA,MACX,kBAAkBmC,EAAM,cAAc;AAAA,IAAA;AAAA,IAE1C,KAAKA,EAAM;AAAA,EAAA;AAEnB;"}
1
+ {"version":3,"file":"binnedDots.js","sources":["../../../src/discrete/layers/binnedDots.ts"],"sourcesContent":["import { extent } from 'd3-array';\nimport type { DataFrame, GroupKey, NO_GROUPED, RowIndex } from '../../DataFrame';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { BinnedDotsLayer, DiscreteSettingsImpl } from '../DiscreteSettingsImpl';\nimport { getOutliersBounds } from '../utils';\nimport { getFacetStringKey } from '../utils/getFacetStringKey';\nimport type { BinnedDotsData } from './types';\n\nconst DEFAULT_BINS_COUNT = 30;\n\nfunction dotbin(\n indexes: RowIndex[],\n step: number,\n convertToScale: (v: number) => number,\n convertFromScale: (v: number) => number,\n valueGetter: (idx: number) => number,\n keyGetter: (idx: number) => string\n) {\n const x = indexes.map(valueGetter).map(convertToScale); // make a protective copy\n const n = indexes.length;\n const dotData = indexes.map((idx) => ({ key: keyGetter(idx), value: valueGetter(idx) }));\n const result: { x: number; count: number; dots: { key: string; value: number }[] }[] = [];\n\n let left = 0; // left index of the current bin\n\n // scan from left, group points less than one step away\n for (let j = 1; j < n; ++j) {\n const scaledLeft = x[left];\n const scaledCurrent = x[j];\n const scaledPrev = x[j - 1];\n if (scaledCurrent >= scaledLeft + step) {\n // use span mid-point, unless that could cause overlap\n const xmid = Math.min((scaledLeft + scaledPrev) / 2, scaledCurrent - step);\n x.fill(xmid, left, j);\n result.push({\n x: convertFromScale(xmid),\n count: j - left,\n dots: dotData.slice(left, j),\n });\n left = j;\n }\n }\n x.fill((x[left] + x[n - 1]) / 2, left, n);\n result.push({\n x: convertFromScale((x[left] + x[n - 1]) / 2),\n count: n - left,\n dots: dotData.slice(left, n),\n });\n\n return result;\n}\n\nexport class BinnedDots {\n bins: {x: number; count: number; dots: {key: string; value: number}[]}[];\n primaryGrouping: string;\n secondaryGrouping: string;\n key: string;\n\n boundsY: {\n min: number;\n max: number;\n };\n\n constructor(\n dataFrame: DataFrame,\n indexes: RowIndex[],\n column: ColumnName,\n primaryGrouping: DataValue | typeof NO_GROUPED,\n secondaryGrouping: DataValue | typeof NO_GROUPED,\n step: number,\n convertToScale: (v: number) => number,\n convertFromScale: (v: number) => number,\n scale: 'log' | 'linear',\n keyColumn: ColumnName | null\n ) {\n this.primaryGrouping = String(primaryGrouping);\n this.secondaryGrouping = String(secondaryGrouping);\n this.key = `binnedDots_${this.primaryGrouping}_${this.secondaryGrouping}`;\n\n const valueGetter = (idx: number) => Number(dataFrame.getColumnValue(column.value, idx));\n const keyGetter = (idx: number) => String(keyColumn ? dataFrame.getColumnValue(keyColumn.value, idx) : idx);\n const sortedGroup = indexes\n .filter(idx => {\n const y = valueGetter(idx);\n if (y === 0 && scale === 'log') {\n console.warn(`Item with ${column.value} = 0 is not shown on chart with log scale`);\n return false;\n }\n return true;\n })\n .sort((a, b) => convertToScale(valueGetter(a)) - convertToScale(valueGetter(b)));\n\n this.bins = dotbin(sortedGroup, step, convertToScale, convertFromScale, valueGetter, keyGetter);\n this.boundsY = {\n min: this.bins[0].x,\n max: this.bins[this.bins.length - 1].x,\n };\n }\n}\n\nexport function getBinnedDotsData(\n layer: BinnedDotsLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: DiscreteSettingsImpl['y'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis']\n): BinnedDotsData {\n const convertToScale = (v: number) => (yAxis.scale === 'log' ? Math.log10(v) : v);\n const convertFromScale = (v: number) => (yAxis.scale === 'log' ? Math.pow(10, v) : v);\n const yGetter = (idx: number) => Number(data.getColumnValue(y.value, idx));\n let minY = Infinity;\n let maxY = -Infinity;\n\n const allRowIndexes = data.getRowsByGrouping([]);\n const [bound1 = yGetter(allRowIndexes[0]), bound2 = yGetter(allRowIndexes[0])] = extent(\n allRowIndexes.filter(idx => {\n if (yGetter(idx) === 0 && yAxis.scale === 'log') {\n console.warn(`Item with ${y.value} = 0 is not shown on chart with log scale`);\n return false;\n }\n return true;\n }),\n yGetter\n );\n const step = Math.abs(convertToScale(bound1) - convertToScale(bound2)) / DEFAULT_BINS_COUNT;\n\n const binnedDotsGroups = groupingKeys.facet.reduce((res: Record<string, BinnedDots[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n groupingKeys.secondary.forEach(secondaryKey => {\n const indexes = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!indexes.length) {\n return;\n }\n let valueIndexesFiltered = Array.from(indexes);\n if (!layer.aes.showOutliers) {\n const [boundsMin, boundMax] = getOutliersBounds(valueIndexesFiltered, yAxis.scale);\n valueIndexesFiltered = valueIndexesFiltered.filter((idx: RowIndex) => {\n return yGetter(idx) >= boundsMin && yGetter(idx) <= boundMax;\n });\n }\n const binnedDots = new BinnedDots(\n data,\n valueIndexesFiltered,\n y,\n primaryKey,\n secondaryKey,\n step,\n convertToScale,\n convertFromScale,\n yAxis.scale,\n layer.keyColumn\n );\n\n if (binnedDots.boundsY.min < minY) {\n minY = binnedDots.boundsY.min;\n }\n if (binnedDots.boundsY.max > maxY) {\n maxY = binnedDots.boundsY.max;\n }\n res[strFacetKey].push(binnedDots);\n });\n });\n return res;\n }, {});\n\n return {\n type: 'binnedDots',\n geoms: binnedDotsGroups,\n meta: {\n minY: Math.min(bound1, bound2, minY),\n maxY: Math.max(bound1, bound2, maxY),\n binsCount: DEFAULT_BINS_COUNT,\n hasKeyFromColumn: layer.keyColumn !== null,\n },\n aes: layer.aes,\n };\n}\n"],"names":["DEFAULT_BINS_COUNT","dotbin","indexes","step","convertToScale","convertFromScale","valueGetter","keyGetter","x","n","dotData","idx","result","left","j","scaledLeft","scaledCurrent","scaledPrev","xmid","BinnedDots","dataFrame","column","primaryGrouping","secondaryGrouping","scale","keyColumn","__publicField","sortedGroup","a","b","getBinnedDotsData","layer","groupingKeys","data","y","yAxis","v","yGetter","minY","maxY","allRowIndexes","bound1","bound2","extent","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","secondaryKey","valueIndexesFiltered","boundsMin","boundMax","getOutliersBounds","binnedDots"],"mappings":";;;;;;;AAQA,MAAMA,IAAqB;AAE3B,SAASC,EACLC,GACAC,GACAC,GACAC,GACAC,GACAC,GACF;AACE,QAAMC,IAAIN,EAAQ,IAAII,CAAW,EAAE,IAAIF,CAAc,GAC/CK,IAAIP,EAAQ,QACZQ,IAAUR,EAAQ,IAAI,CAACS,OAAS,EAAE,KAAKJ,EAAUI,CAAG,GAAG,OAAOL,EAAYK,CAAG,IAAI,GACjFC,IAAiF,CAAA;AAEvF,MAAIC,IAAO;AAGX,WAASC,IAAI,GAAGA,IAAIL,GAAG,EAAEK,GAAG;AACxB,UAAMC,IAAaP,EAAEK,CAAI,GACnBG,IAAgBR,EAAEM,CAAC,GACnBG,IAAaT,EAAEM,IAAI,CAAC;AAC1B,QAAIE,KAAiBD,IAAaZ,GAAM;AAEpC,YAAMe,IAAO,KAAK,KAAKH,IAAaE,KAAc,GAAGD,IAAgBb,CAAI;AACzE,MAAAK,EAAE,KAAKU,GAAML,GAAMC,CAAC,GACpBF,EAAO,KAAK;AAAA,QACR,GAAGP,EAAiBa,CAAI;AAAA,QACxB,OAAOJ,IAAID;AAAA,QACX,MAAMH,EAAQ,MAAMG,GAAMC,CAAC;AAAA,MAAA,CAC9B,GACDD,IAAOC;AAAA,IACX;AAAA,EACJ;AACA,SAAAN,EAAE,MAAMA,EAAEK,CAAI,IAAIL,EAAEC,IAAI,CAAC,KAAK,GAAGI,GAAMJ,CAAC,GACxCG,EAAO,KAAK;AAAA,IACR,GAAGP,GAAkBG,EAAEK,CAAI,IAAIL,EAAEC,IAAI,CAAC,KAAK,CAAC;AAAA,IAC5C,OAAOA,IAAII;AAAA,IACX,MAAMH,EAAQ,MAAMG,GAAMJ,CAAC;AAAA,EAAA,CAC9B,GAEMG;AACX;AAEO,MAAMO,EAAW;AAAA,EAWpB,YACIC,GACAlB,GACAmB,GACAC,GACAC,GACApB,GACAC,GACAC,GACAmB,GACAC,GACF;AArBF,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEA,IAAAA,EAAA;AAiBI,SAAK,kBAAkB,OAAOJ,CAAe,GAC7C,KAAK,oBAAoB,OAAOC,CAAiB,GACjD,KAAK,MAAM,cAAc,KAAK,eAAe,IAAI,KAAK,iBAAiB;AAEvE,UAAMjB,IAAc,CAACK,MAAgB,OAAOS,EAAU,eAAeC,EAAO,OAAOV,CAAG,CAAC,GACjFJ,IAAY,CAACI,MAAgB,OAAOc,IAAYL,EAAU,eAAeK,EAAU,OAAOd,CAAG,IAAIA,CAAG,GACpGgB,IAAczB,EACf,OAAO,CAAAS,MACML,EAAYK,CAAG,MACf,KAAKa,MAAU,SACrB,QAAQ,KAAK,aAAaH,EAAO,KAAK,2CAA2C,GAC1E,MAEJ,EACV,EACA,KAAK,CAACO,GAAGC,MAAMzB,EAAeE,EAAYsB,CAAC,CAAC,IAAIxB,EAAeE,EAAYuB,CAAC,CAAC,CAAC;AAEnF,SAAK,OAAO5B,EAAO0B,GAAaxB,GAAMC,GAAgBC,GAAkBC,GAAaC,CAAS,GAC9F,KAAK,UAAU;AAAA,MACX,KAAK,KAAK,KAAK,CAAC,EAAE;AAAA,MAClB,KAAK,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE;AAAA,IAAA;AAAA,EAE7C;AACJ;AAEO,SAASuB,EACZC,GACAC,GAKAC,GACAC,GACAC,GACc;AACd,QAAM/B,IAAiB,CAACgC,MAAeD,EAAM,UAAU,QAAQ,KAAK,MAAMC,CAAC,IAAIA,GACzE/B,IAAmB,CAAC+B,MAAeD,EAAM,UAAU,QAAQ,KAAK,IAAI,IAAIC,CAAC,IAAIA,GAC7EC,IAAU,CAAC1B,MAAgB,OAAOsB,EAAK,eAAeC,EAAE,OAAOvB,CAAG,CAAC;AACzE,MAAI2B,IAAO,OACPC,IAAO;AAEX,QAAMC,IAAgBP,EAAK,kBAAkB,EAAE,GACzC,CAACQ,IAASJ,EAAQG,EAAc,CAAC,CAAC,GAAGE,IAASL,EAAQG,EAAc,CAAC,CAAC,CAAC,IAAIG;AAAA,IAC7EH,EAAc,OAAO,CAAA7B,MACb0B,EAAQ1B,CAAG,MAAM,KAAKwB,EAAM,UAAU,SACtC,QAAQ,KAAK,aAAaD,EAAE,KAAK,2CAA2C,GACrE,MAEJ,EACV;AAAA,IACDG;AAAA,EAAA,GAEElC,IAAO,KAAK,IAAIC,EAAeqC,CAAM,IAAIrC,EAAesC,CAAM,CAAC,IAAI1C;AA2CzE,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OA3CqBgC,EAAa,MAAM,OAAO,CAACY,GAAmCC,MAAa;AAChG,YAAMC,IAAcC,EAAkBF,CAAQ;AAC9C,aAAAD,EAAIE,CAAW,IAAI,CAAA,GACnBd,EAAa,QAAQ,QAAQ,CAAAgB,MAAc;AACvC,QAAAhB,EAAa,UAAU,QAAQ,CAAAiB,MAAgB;AAC3C,gBAAM/C,IAAU+B,EAAK,kBAAkB,CAAC,GAAGY,GAAUG,GAAYC,CAAY,CAAC;AAC9E,cAAI,CAAC/C,EAAQ;AACT;AAEJ,cAAIgD,IAAuB,MAAM,KAAKhD,CAAO;AAC7C,cAAI,CAAC6B,EAAM,IAAI,cAAc;AACzB,kBAAM,CAACoB,GAAWC,CAAQ,IAAIC,EAAkBH,GAAsBf,EAAM,KAAK;AACjF,YAAAe,IAAuBA,EAAqB,OAAO,CAACvC,MACzC0B,EAAQ1B,CAAG,KAAKwC,KAAad,EAAQ1B,CAAG,KAAKyC,CACvD;AAAA,UACL;AACA,gBAAME,IAAa,IAAInC;AAAA,YACnBc;AAAA,YACAiB;AAAA,YACAhB;AAAA,YACAc;AAAA,YACAC;AAAA,YACA9C;AAAA,YACAC;AAAA,YACAC;AAAA,YACA8B,EAAM;AAAA,YACNJ,EAAM;AAAA,UAAA;AAGV,UAAIuB,EAAW,QAAQ,MAAMhB,MACzBA,IAAOgB,EAAW,QAAQ,MAE1BA,EAAW,QAAQ,MAAMf,MACzBA,IAAOe,EAAW,QAAQ,MAE9BV,EAAIE,CAAW,EAAE,KAAKQ,CAAU;AAAA,QACpC,CAAC;AAAA,MACL,CAAC,GACMV;AAAA,IACX,GAAG,CAAA,CAAE;AAAA,IAKD,MAAM;AAAA,MACF,MAAM,KAAK,IAAIH,GAAQC,GAAQJ,CAAI;AAAA,MACnC,MAAM,KAAK,IAAIG,GAAQC,GAAQH,CAAI;AAAA,MACnC,WAAWvC;AAAA,MACX,kBAAkB+B,EAAM,cAAc;AAAA,IAAA;AAAA,IAE1C,KAAKA,EAAM;AAAA,EAAA;AAEnB;"}
@@ -1,7 +1,7 @@
1
- import { NO_GROUPED, DataFrame, GroupKey } from '../../DataFrame';
1
+ import { DataFrame, GroupKey, NO_GROUPED } from '../../DataFrame';
2
+ import { ColumnName, DataValue } from '../../types';
2
3
  import { BoxLayer, DiscreteSettingsImpl } from '../DiscreteSettingsImpl';
3
4
  import { BoxesData } from './types';
4
- import { ColumnName, DataValue, Row } from '../../types';
5
5
  export declare class Box {
6
6
  lower: number;
7
7
  middle: number;
@@ -11,7 +11,6 @@ export declare class Box {
11
11
  outliers: {
12
12
  y: number;
13
13
  id: string;
14
- data: Row;
15
14
  }[];
16
15
  primaryGrouping: GroupKey;
17
16
  secondaryGrouping: GroupKey;
@@ -20,7 +19,7 @@ export declare class Box {
20
19
  min: number;
21
20
  max: number;
22
21
  };
23
- constructor(valuesRows: Row[], valueColumn: string, keyColumn: string | null, scale: 'linear' | 'log', primaryGrouping: DataValue | typeof NO_GROUPED, secondaryGrouping: DataValue | typeof NO_GROUPED, lower: number, middle: number, upper: number, k: number, showOutliers?: boolean);
22
+ constructor(values: number[], keys: string[], scale: 'linear' | 'log', primaryGrouping: DataValue | typeof NO_GROUPED, secondaryGrouping: DataValue | typeof NO_GROUPED, lower: number, middle: number, upper: number, k: number, showOutliers?: boolean);
24
23
  }
25
24
  export declare function getBoxesData(layer: BoxLayer, groupingKeys: {
26
25
  facet: GroupKey[][];
@@ -1 +1 @@
1
- {"version":3,"file":"boxes.d.ts","sourceRoot":"","sources":["../../../src/discrete/layers/boxes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAC,QAAQ,EAAE,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,aAAa,CAAC;AAe5D,qBAAa,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE;QACN,CAAC,EAAE,MAAM,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,GAAG,CAAC;KACb,EAAE,CAAC;IAGJ,eAAe,EAAE,QAAQ,CAAC;IAC1B,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IAGZ,OAAO,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;gBAGE,UAAU,EAAE,GAAG,EAAE,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,QAAQ,GAAG,KAAK,EACvB,eAAe,EAAE,SAAS,GAAG,OAAO,UAAU,EAC9C,iBAAiB,EAAE,SAAS,GAAG,OAAO,UAAU,EAChD,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,YAAY,UAAO;CAiD1B;AAED,wBAAgB,YAAY,CACxB,KAAK,EAAE,QAAQ,EACf,YAAY,EAAE;IACV,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB,EACD,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,UAAU,EACb,SAAS,EAAE,UAAU,GAAG,IAAI,EAC5B,KAAK,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GACtD,SAAS,CA0CX"}
1
+ {"version":3,"file":"boxes.d.ts","sourceRoot":"","sources":["../../../src/discrete/layers/boxes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAczC,qBAAa,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE;QACN,CAAC,EAAE,MAAM,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;IAGJ,eAAe,EAAE,QAAQ,CAAC;IAC1B,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IAGZ,OAAO,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;gBAGE,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,QAAQ,GAAG,KAAK,EACvB,eAAe,EAAE,SAAS,GAAG,OAAO,UAAU,EAC9C,iBAAiB,EAAE,SAAS,GAAG,OAAO,UAAU,EAChD,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,YAAY,UAAO;CA+C1B;AAED,wBAAgB,YAAY,CACxB,KAAK,EAAE,QAAQ,EACf,YAAY,EAAE;IACV,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB,EACD,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,UAAU,EACb,SAAS,EAAE,UAAU,GAAG,IAAI,EAC5B,KAAK,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GACtD,SAAS,CA6CX"}
@@ -1,91 +1,90 @@
1
- var y = Object.defineProperty;
2
- var q = (o, t, n) => t in o ? y(o, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : o[t] = n;
3
- var a = (o, t, n) => q(o, typeof t != "symbol" ? t + "" : t, n);
4
- import { getFacetStringKey as v } from "../utils/getFacetStringKey.js";
5
- import w from "../../node_modules/lodash/lodash.js";
6
- import { quantileSorted as G } from "../../node_modules/d3-array/src/quantile.js";
7
- import B from "../../node_modules/d3-array/src/min.js";
8
- import F from "../../node_modules/d3-array/src/max.js";
9
- import O from "../../node_modules/d3-array/src/extent.js";
10
- function V(o, t, n, d = !1) {
11
- const s = o.map(t).sort((h, r) => h - r);
12
- if (d) {
13
- const h = w.find(s, (r) => r > 0);
14
- if (!h)
1
+ var I = Object.defineProperty;
2
+ var M = (o, t, i) => t in o ? I(o, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : o[t] = i;
3
+ var n = (o, t, i) => M(o, typeof t != "symbol" ? t + "" : t, i);
4
+ import v from "../../node_modules/lodash/lodash.js";
5
+ import { getFacetStringKey as E } from "../utils/getFacetStringKey.js";
6
+ import { quantileSorted as S } from "../../node_modules/d3-array/src/quantile.js";
7
+ import $ from "../../node_modules/d3-array/src/min.js";
8
+ import q from "../../node_modules/d3-array/src/max.js";
9
+ import B from "../../node_modules/d3-array/src/extent.js";
10
+ function C(o, t, i = !1) {
11
+ const e = o.sort((a, s) => a - s);
12
+ if (i) {
13
+ const a = v.find(e, (s) => s > 0);
14
+ if (!a)
15
15
  throw Error("Group with all zeros in log scale");
16
- return s.map((r) => r === 0 ? h : r).map(n);
16
+ return e.map((s) => s === 0 ? a : s).map(t);
17
17
  }
18
- return s.map(n);
18
+ return e.map(t);
19
19
  }
20
- class _ {
21
- constructor(t, n, d, s, h, r, u, c, f, p, l = !0) {
22
- a(this, "lower");
23
- a(this, "middle");
24
- a(this, "upper");
25
- a(this, "min");
26
- a(this, "max");
27
- a(this, "outliers");
20
+ class F {
21
+ constructor(t, i, e, a, s, u, h, c, l, g = !0) {
22
+ n(this, "lower");
23
+ n(this, "middle");
24
+ n(this, "upper");
25
+ n(this, "min");
26
+ n(this, "max");
27
+ n(this, "outliers");
28
28
  // Saved data for linking with visual properties (set color by grouping etc.)
29
- a(this, "primaryGrouping");
30
- a(this, "secondaryGrouping");
31
- a(this, "key");
29
+ n(this, "primaryGrouping");
30
+ n(this, "secondaryGrouping");
31
+ n(this, "key");
32
32
  // Bounds for correct chart viewport
33
- a(this, "boundsY");
33
+ n(this, "boundsY");
34
34
  if (t.length === 0)
35
35
  throw Error("Unable to create box on empty data");
36
- if (u > c || u > f || c > f)
37
- throw Error(`Invalid box bounds values: lower=${u}, middle=${c}, upper=${f}`);
38
- if (p < 0)
39
- throw Error(`Invalid box whiskers coefficient: k=${p}. It should be positive`);
40
- const m = (i) => Number(i[n]);
41
- this.primaryGrouping = String(h), this.secondaryGrouping = String(r), this.key = `box_${this.primaryGrouping}_${this.secondaryGrouping}`;
42
- const x = (i) => s === "log" ? Math.log10(i) : i, e = (i) => s === "log" ? Math.pow(10, i) : i, g = V(t, m, x, s === "log"), b = G(g, u), I = G(g, c), S = G(g, f), Y = S - b;
43
- this.upper = e(S), this.middle = e(I), this.lower = e(b), this.min = Math.max(B(t, m), e(b - p * Y)), this.max = Math.min(F(t, m), e(S + p * Y)), this.outliers = t.filter((i) => m(i) < this.min || m(i) > this.max).map((i, $) => ({
44
- y: m(i),
45
- data: i,
46
- id: String(d ? i[d] : $)
36
+ if (u > h || u > c || h > c)
37
+ throw Error(`Invalid box bounds values: lower=${u}, middle=${h}, upper=${c}`);
38
+ if (l < 0)
39
+ throw Error(`Invalid box whiskers coefficient: k=${l}. It should be positive`);
40
+ this.primaryGrouping = String(a), this.secondaryGrouping = String(s), this.key = `box_${this.primaryGrouping}_${this.secondaryGrouping}`;
41
+ const b = (r) => e === "log" ? Math.log10(r) : r, f = (r) => e === "log" ? Math.pow(10, r) : r, p = C(t, b, e === "log"), x = S(p, u), w = S(p, h), m = S(p, c), d = m - x;
42
+ this.upper = f(m), this.middle = f(w), this.lower = f(x), this.min = Math.max($(t), f(x - l * d)), this.max = Math.min(q(t), f(m + l * d)), this.outliers = t.filter((r) => r < this.min || r > this.max).map((r, y) => ({
43
+ y: r,
44
+ id: i[y] ?? String(y)
47
45
  }));
48
- const [M = 1 / 0, E = -1 / 0] = O(this.outliers, (i) => i.y);
46
+ const [G = 1 / 0, Y = -1 / 0] = B(this.outliers, (r) => r.y);
49
47
  this.boundsY = {
50
- min: l ? Math.min(this.min, M) : this.min,
51
- max: l ? Math.max(this.max, E) : this.max
48
+ min: g ? Math.min(this.min, G) : this.min,
49
+ max: g ? Math.max(this.max, Y) : this.max
52
50
  };
53
51
  }
54
52
  }
55
- function j(o, t, n, d, s, h) {
56
- let r = 1 / 0, u = -1 / 0;
53
+ function D(o, t, i, e, a, s) {
54
+ let u = 1 / 0, h = -1 / 0;
57
55
  return {
58
56
  type: "box",
59
- geoms: t.facet.reduce((c, f) => {
60
- const p = v(f);
61
- return c[p] = [], t.primary.forEach((l) => {
62
- t.secondary.forEach((m) => {
63
- const x = n.getRowsByGrouping([...f, l, m]);
64
- if (!x.length)
57
+ geoms: t.facet.reduce((c, l) => {
58
+ const g = E(l);
59
+ return c[g] = [], t.primary.forEach((b) => {
60
+ t.secondary.forEach((f) => {
61
+ const p = i.getRowsByGrouping([...l, b, f]);
62
+ if (!p.length)
65
63
  return;
66
- const e = new _(
64
+ const x = Array.from(p).map((d) => i.getColumnValue(e.value, d)), w = Array.from(p).map(
65
+ (d) => String((a ? i.getColumnValue(a.value, d) : void 0) ?? d)
66
+ ), m = new F(
67
67
  x,
68
- d.value,
69
- (s == null ? void 0 : s.value) ?? null,
70
- h.scale,
71
- l,
72
- m,
68
+ w,
69
+ s.scale,
70
+ b,
71
+ f,
73
72
  o.stat.lower,
74
73
  o.stat.medium,
75
74
  o.stat.upper,
76
75
  o.stat.k,
77
76
  o.aes.showOutliers
78
77
  );
79
- e.boundsY.min < r && (r = e.boundsY.min), e.boundsY.max > u && (u = e.boundsY.max), c[p].push(e);
78
+ m.boundsY.min < u && (u = m.boundsY.min), m.boundsY.max > h && (h = m.boundsY.max), c[g].push(m);
80
79
  });
81
80
  }), c;
82
81
  }, {}),
83
- meta: { minY: r, maxY: u },
82
+ meta: { minY: u, maxY: h },
84
83
  aes: o.aes
85
84
  };
86
85
  }
87
86
  export {
88
- _ as Box,
89
- j as getBoxesData
87
+ F as Box,
88
+ D as getBoxesData
90
89
  };
91
90
  //# sourceMappingURL=boxes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boxes.js","sources":["../../../src/discrete/layers/boxes.ts"],"sourcesContent":["import type { NO_GROUPED} from '../../DataFrame';\nimport type {DataFrame,GroupKey} from '../../DataFrame';\nimport type {BoxLayer, DiscreteSettingsImpl} from '../DiscreteSettingsImpl';\nimport type {BoxesData} from './types';\nimport {getFacetStringKey} from '../utils/getFacetStringKey';\nimport {extent, max, min, quantileSorted} from 'd3-array';\nimport type {ColumnName, DataValue, Row} from '../../types';\nimport lodash from 'lodash';\n\nfunction getSortedConvertedValues (valuesRows: Row[], yGetter:(row:Row) => number, convertToScale:(v:number) => number, changeZeros = false) {\n const valuesSorted = valuesRows.map(yGetter).sort((a, b) => a - b);\n if (changeZeros) {\n const firstMoreThanZero = lodash.find(valuesSorted, (v) => v > 0);\n if (!firstMoreThanZero) {\n throw Error('Group with all zeros in log scale');\n }\n return valuesSorted.map((v) => v === 0 ? firstMoreThanZero : v).map(convertToScale);\n }\n return valuesSorted.map(convertToScale);\n}\n\nexport class Box {\n lower: number;\n middle: number;\n upper: number;\n min: number;\n max: number;\n outliers: {\n y: number;\n id: string;\n data: Row;\n }[];\n\n // Saved data for linking with visual properties (set color by grouping etc.)\n primaryGrouping: GroupKey;\n secondaryGrouping: GroupKey;\n key: string;\n\n // Bounds for correct chart viewport\n boundsY: {\n min: number;\n max: number;\n };\n\n constructor(\n valuesRows: Row[],\n valueColumn: string,\n keyColumn: string | null,\n scale: 'linear' | 'log',\n primaryGrouping: DataValue | typeof NO_GROUPED,\n secondaryGrouping: DataValue | typeof NO_GROUPED,\n lower: number,\n middle: number,\n upper: number,\n k: number,\n showOutliers = true\n ) {\n if (valuesRows.length === 0) {\n throw Error('Unable to create box on empty data');\n }\n if (lower > middle || lower > upper || middle > upper) {\n throw Error(`Invalid box bounds values: lower=${lower}, middle=${middle}, upper=${upper}`);\n }\n if (k < 0) {\n throw Error(`Invalid box whiskers coefficient: k=${k}. It should be positive`);\n }\n const yGetter = (row: Row) => Number(row[valueColumn]);\n\n this.primaryGrouping = String(primaryGrouping);\n this.secondaryGrouping = String(secondaryGrouping);\n this.key = `box_${this.primaryGrouping}_${this.secondaryGrouping}`;\n\n //TODO: for speed use own quantile calculation; for comparison https://github.com/JetBrains/lets-plot/blob/ef4aecfa451b332e6e7544cfb3a2118c873f09c6/plot-base-portable/src/commonMain/kotlin/jetbrains/datalore/plot/base/stat/FiveNumberSummary.kt#L17\n const convertToScale = (v: number) => (scale === 'log' ? Math.log10(v) : v);\n const convertFromScale = (v: number) => (scale === 'log' ? Math.pow(10, v) : v);\n\n // throw error for values <= 1\n const valuesSortedConverted = getSortedConvertedValues(valuesRows, yGetter, convertToScale, scale === 'log');\n\n const q1 = quantileSorted(valuesSortedConverted, lower) as number;\n const q2 = quantileSorted(valuesSortedConverted, middle) as number;\n const q3 = quantileSorted(valuesSortedConverted, upper) as number;\n const interQuantileRange = q3 - q1;\n\n this.upper = convertFromScale(q3);\n this.middle = convertFromScale(q2);\n this.lower = convertFromScale(q1);\n // NB: Cut whiskers by min and max array values\n this.min = Math.max(min(valuesRows, yGetter) as number, convertFromScale(q1 - k * interQuantileRange));\n this.max = Math.min(max(valuesRows, yGetter) as number, convertFromScale(q3 + k * interQuantileRange));\n this.outliers = valuesRows\n .filter(row => yGetter(row) < this.min || yGetter(row) > this.max)\n .map((row, idx) => ({\n y: yGetter(row),\n data: row,\n id: keyColumn ? String(row[keyColumn]) : String(idx),\n }));\n\n const [minOutlier = Infinity, maxOutlier = -Infinity] = extent(this.outliers, item => item.y);\n this.boundsY = {\n min: showOutliers ? Math.min(this.min, minOutlier) : this.min,\n max: showOutliers ? Math.max(this.max, maxOutlier) : this.max,\n };\n }\n}\n\nexport function getBoxesData(\n layer: BoxLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: ColumnName,\n keyColumn: ColumnName | null,\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis']\n): BoxesData {\n let minY = Infinity;\n let maxY = -Infinity;\n\n return {\n type: 'box',\n geoms: groupingKeys.facet.reduce((res: Record<string, Box[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n groupingKeys.secondary.forEach(secondaryKey => {\n const rowValues = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!rowValues.length) {\n return;\n }\n const box = new Box(\n rowValues,\n y.value,\n keyColumn?.value ?? null,\n yAxis.scale,\n primaryKey,\n secondaryKey,\n layer.stat.lower,\n layer.stat.medium,\n layer.stat.upper,\n layer.stat.k,\n layer.aes.showOutliers\n );\n if (box.boundsY.min < minY) {\n minY = box.boundsY.min;\n }\n if (box.boundsY.max > maxY) {\n maxY = box.boundsY.max;\n }\n res[strFacetKey].push(box);\n });\n });\n return res;\n }, {} as Record<GroupKey, Box[]>),\n meta: {minY, maxY},\n aes: layer.aes,\n };\n}\n"],"names":["getSortedConvertedValues","valuesRows","yGetter","convertToScale","changeZeros","valuesSorted","a","b","firstMoreThanZero","lodash","v","Box","valueColumn","keyColumn","scale","primaryGrouping","secondaryGrouping","lower","middle","upper","k","showOutliers","__publicField","row","convertFromScale","valuesSortedConverted","q1","quantileSorted","q2","q3","interQuantileRange","min","max","idx","minOutlier","maxOutlier","extent","item","getBoxesData","layer","groupingKeys","data","y","yAxis","minY","maxY","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","secondaryKey","rowValues","box"],"mappings":";;;;;;;;;AASA,SAASA,EAA0BC,GAAmBC,GAA6BC,GAAqCC,IAAc,IAAO;AACzI,QAAMC,IAAeJ,EAAW,IAAIC,CAAO,EAAE,KAAK,CAACI,GAAGC,MAAMD,IAAIC,CAAC;AACjE,MAAIH,GAAa;AACb,UAAMI,IAAoBC,EAAO,KAAKJ,GAAc,CAACK,MAAMA,IAAI,CAAC;AAChE,QAAI,CAACF;AACD,YAAM,MAAM,mCAAmC;AAEnD,WAAOH,EAAa,IAAI,CAACK,MAAMA,MAAM,IAAIF,IAAoBE,CAAC,EAAE,IAAIP,CAAc;AAAA,EACtF;AACA,SAAOE,EAAa,IAAIF,CAAc;AAC1C;AAEO,MAAMQ,EAAI;AAAA,EAuBb,YACIV,GACAW,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IAAe,IACjB;AAlCF,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAOA;AAAA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGA;AAAA,IAAAA,EAAA;AAkBI,QAAIrB,EAAW,WAAW;AACtB,YAAM,MAAM,oCAAoC;AAEpD,QAAIgB,IAAQC,KAAUD,IAAQE,KAASD,IAASC;AAC5C,YAAM,MAAM,oCAAoCF,CAAK,YAAYC,CAAM,WAAWC,CAAK,EAAE;AAE7F,QAAIC,IAAI;AACJ,YAAM,MAAM,uCAAuCA,CAAC,yBAAyB;AAEjF,UAAMlB,IAAU,CAACqB,MAAa,OAAOA,EAAIX,CAAW,CAAC;AAErD,SAAK,kBAAkB,OAAOG,CAAe,GAC7C,KAAK,oBAAoB,OAAOC,CAAiB,GACjD,KAAK,MAAM,OAAO,KAAK,eAAe,IAAI,KAAK,iBAAiB;AAGhE,UAAMb,IAAiB,CAACO,MAAeI,MAAU,QAAQ,KAAK,MAAMJ,CAAC,IAAIA,GACnEc,IAAmB,CAACd,MAAeI,MAAU,QAAQ,KAAK,IAAI,IAAIJ,CAAC,IAAIA,GAGvEe,IAAwBzB,EAAyBC,GAAYC,GAASC,GAAgBW,MAAU,KAAK,GAErGY,IAAKC,EAAeF,GAAuBR,CAAK,GAChDW,IAAKD,EAAeF,GAAuBP,CAAM,GACjDW,IAAKF,EAAeF,GAAuBN,CAAK,GAChDW,IAAqBD,IAAKH;AAEhC,SAAK,QAAQF,EAAiBK,CAAE,GAChC,KAAK,SAASL,EAAiBI,CAAE,GACjC,KAAK,QAAQJ,EAAiBE,CAAE,GAEhC,KAAK,MAAM,KAAK,IAAIK,EAAI9B,GAAYC,CAAO,GAAasB,EAAiBE,IAAKN,IAAIU,CAAkB,CAAC,GACrG,KAAK,MAAM,KAAK,IAAIE,EAAI/B,GAAYC,CAAO,GAAasB,EAAiBK,IAAKT,IAAIU,CAAkB,CAAC,GACrG,KAAK,WAAW7B,EACX,OAAO,OAAOC,EAAQqB,CAAG,IAAI,KAAK,OAAOrB,EAAQqB,CAAG,IAAI,KAAK,GAAG,EAChE,IAAI,CAACA,GAAKU,OAAS;AAAA,MAChB,GAAG/B,EAAQqB,CAAG;AAAA,MACd,MAAMA;AAAA,MACN,IAAgB,OAAZV,IAAmBU,EAAIV,CAAS,IAAYoB,CAAX;AAAA,IAAc,EACrD;AAEN,UAAM,CAACC,IAAa,OAAUC,IAAa,MAAS,IAAIC,EAAO,KAAK,UAAU,CAAAC,MAAQA,EAAK,CAAC;AAC5F,SAAK,UAAU;AAAA,MACX,KAAKhB,IAAe,KAAK,IAAI,KAAK,KAAKa,CAAU,IAAI,KAAK;AAAA,MAC1D,KAAKb,IAAe,KAAK,IAAI,KAAK,KAAKc,CAAU,IAAI,KAAK;AAAA,IAAA;AAAA,EAElE;AACJ;AAEO,SAASG,EACZC,GACAC,GAKAC,GACAC,GACA7B,GACA8B,GACS;AACT,MAAIC,IAAO,OACPC,IAAO;AAEX,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OAAOL,EAAa,MAAM,OAAO,CAACM,GAA4BC,MAAa;AACvE,YAAMC,IAAcC,EAAkBF,CAAQ;AAC9C,aAAAD,EAAIE,CAAW,IAAI,CAAA,GACnBR,EAAa,QAAQ,QAAQ,CAAAU,MAAc;AACvC,QAAAV,EAAa,UAAU,QAAQ,CAAAW,MAAgB;AAC3C,gBAAMC,IAAYX,EAAK,kBAAkB,CAAC,GAAGM,GAAUG,GAAYC,CAAY,CAAC;AAChF,cAAI,CAACC,EAAU;AACX;AAEJ,gBAAMC,IAAM,IAAI1C;AAAA,YACZyC;AAAA,YACAV,EAAE;AAAA,aACF7B,KAAA,gBAAAA,EAAW,UAAS;AAAA,YACpB8B,EAAM;AAAA,YACNO;AAAA,YACAC;AAAA,YACAZ,EAAM,KAAK;AAAA,YACXA,EAAM,KAAK;AAAA,YACXA,EAAM,KAAK;AAAA,YACXA,EAAM,KAAK;AAAA,YACXA,EAAM,IAAI;AAAA,UAAA;AAEd,UAAIc,EAAI,QAAQ,MAAMT,MAClBA,IAAOS,EAAI,QAAQ,MAEnBA,EAAI,QAAQ,MAAMR,MAClBA,IAAOQ,EAAI,QAAQ,MAEvBP,EAAIE,CAAW,EAAE,KAAKK,CAAG;AAAA,QAC7B,CAAC;AAAA,MACL,CAAC,GACMP;AAAA,IACX,GAAG,CAAA,CAA6B;AAAA,IAChC,MAAM,EAAC,MAAAF,GAAM,MAAAC,EAAA;AAAA,IACb,KAAKN,EAAM;AAAA,EAAA;AAEnB;"}
1
+ {"version":3,"file":"boxes.js","sources":["../../../src/discrete/layers/boxes.ts"],"sourcesContent":["import { extent, max, min, quantileSorted } from 'd3-array';\nimport lodash from 'lodash';\nimport type { DataFrame, GroupKey, NO_GROUPED } from '../../DataFrame';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { BoxLayer, DiscreteSettingsImpl } from '../DiscreteSettingsImpl';\nimport { getFacetStringKey } from '../utils/getFacetStringKey';\nimport type { BoxesData } from './types';\n\nfunction getSortedConvertedValues (valuesRows: number[], convertToScale:(v:number) => number, changeZeros = false) {\n const valuesSorted = valuesRows.sort((a, b) => a - b);\n if (changeZeros) {\n const firstMoreThanZero = lodash.find(valuesSorted, (v) => v > 0);\n if (!firstMoreThanZero) {\n throw Error('Group with all zeros in log scale');\n }\n return valuesSorted.map((v) => v === 0 ? firstMoreThanZero : v).map(convertToScale);\n }\n return valuesSorted.map(convertToScale);\n}\n\nexport class Box {\n lower: number;\n middle: number;\n upper: number;\n min: number;\n max: number;\n outliers: {\n y: number;\n id: string;\n }[];\n\n // Saved data for linking with visual properties (set color by grouping etc.)\n primaryGrouping: GroupKey;\n secondaryGrouping: GroupKey;\n key: string;\n\n // Bounds for correct chart viewport\n boundsY: {\n min: number;\n max: number;\n };\n\n constructor(\n values: number[],\n keys: string[],\n scale: 'linear' | 'log',\n primaryGrouping: DataValue | typeof NO_GROUPED,\n secondaryGrouping: DataValue | typeof NO_GROUPED,\n lower: number,\n middle: number,\n upper: number,\n k: number,\n showOutliers = true\n ) {\n if (values.length === 0) {\n throw Error('Unable to create box on empty data');\n }\n if (lower > middle || lower > upper || middle > upper) {\n throw Error(`Invalid box bounds values: lower=${lower}, middle=${middle}, upper=${upper}`);\n }\n if (k < 0) {\n throw Error(`Invalid box whiskers coefficient: k=${k}. It should be positive`);\n }\n\n this.primaryGrouping = String(primaryGrouping);\n this.secondaryGrouping = String(secondaryGrouping);\n this.key = `box_${this.primaryGrouping}_${this.secondaryGrouping}`;\n\n //TODO: for speed use own quantile calculation; for comparison https://github.com/JetBrains/lets-plot/blob/ef4aecfa451b332e6e7544cfb3a2118c873f09c6/plot-base-portable/src/commonMain/kotlin/jetbrains/datalore/plot/base/stat/FiveNumberSummary.kt#L17\n const convertToScale = (v: number) => (scale === 'log' ? Math.log10(v) : v);\n const convertFromScale = (v: number) => (scale === 'log' ? Math.pow(10, v) : v);\n\n // throw error for values <= 1\n const valuesSortedConverted = getSortedConvertedValues(values, convertToScale, scale === 'log');\n\n const q1 = quantileSorted(valuesSortedConverted, lower) as number;\n const q2 = quantileSorted(valuesSortedConverted, middle) as number;\n const q3 = quantileSorted(valuesSortedConverted, upper) as number;\n const interQuantileRange = q3 - q1;\n\n this.upper = convertFromScale(q3);\n this.middle = convertFromScale(q2);\n this.lower = convertFromScale(q1);\n // NB: Cut whiskers by min and max array values\n this.min = Math.max(min(values) as number, convertFromScale(q1 - k * interQuantileRange));\n this.max = Math.min(max(values) as number, convertFromScale(q3 + k * interQuantileRange));\n this.outliers = values\n .filter((y: number) => y < this.min || y > this.max)\n .map((y, idx) => ({\n y,\n id: keys[idx] ?? String(idx),\n }));\n\n const [minOutlier = Infinity, maxOutlier = -Infinity] = extent(this.outliers, item => item.y);\n this.boundsY = {\n min: showOutliers ? Math.min(this.min, minOutlier) : this.min,\n max: showOutliers ? Math.max(this.max, maxOutlier) : this.max,\n };\n }\n}\n\nexport function getBoxesData(\n layer: BoxLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: ColumnName,\n keyColumn: ColumnName | null,\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis']\n): BoxesData {\n let minY = Infinity;\n let maxY = -Infinity;\n\n return {\n type: 'box',\n geoms: groupingKeys.facet.reduce((res: Record<string, Box[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n groupingKeys.secondary.forEach(secondaryKey => {\n const indexes = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!indexes.length) {\n return;\n }\n const values = Array.from(indexes).map(i => data.getColumnValue(y.value, i) as number);\n const keys = Array.from(indexes).map(i =>\n String((keyColumn ? data.getColumnValue(keyColumn.value, i) : undefined) ?? i)\n );\n const box = new Box(\n values,\n keys,\n yAxis.scale,\n primaryKey,\n secondaryKey,\n layer.stat.lower,\n layer.stat.medium,\n layer.stat.upper,\n layer.stat.k,\n layer.aes.showOutliers\n );\n if (box.boundsY.min < minY) {\n minY = box.boundsY.min;\n }\n if (box.boundsY.max > maxY) {\n maxY = box.boundsY.max;\n }\n res[strFacetKey].push(box);\n });\n });\n return res;\n }, {} as Record<GroupKey, Box[]>),\n meta: {minY, maxY},\n aes: layer.aes,\n };\n}\n"],"names":["getSortedConvertedValues","valuesRows","convertToScale","changeZeros","valuesSorted","b","firstMoreThanZero","lodash","v","Box","values","keys","scale","primaryGrouping","secondaryGrouping","lower","middle","upper","k","showOutliers","__publicField","convertFromScale","valuesSortedConverted","q1","quantileSorted","q2","q3","interQuantileRange","min","max","y","idx","minOutlier","maxOutlier","extent","item","getBoxesData","layer","groupingKeys","data","keyColumn","yAxis","minY","maxY","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","secondaryKey","indexes","i","box"],"mappings":"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"}
@@ -1,14 +1,13 @@
1
- import { GroupKey, DataFrame } from '../../DataFrame';
1
+ import { DataFrame, GroupKey } from '../../DataFrame';
2
+ import { ColumnName } from '../../types';
2
3
  import { DiscreteSettingsImpl, DotLayer } from '../DiscreteSettingsImpl';
3
4
  import { DotsData } from './types';
4
- import { ColumnName, DataValue } from '../../types';
5
5
  export type DotsGroup = {
6
6
  key: string;
7
7
  values: {
8
8
  y: number;
9
9
  jitter: number;
10
10
  id: string;
11
- data: Record<string, DataValue>;
12
11
  }[];
13
12
  primaryGrouping: string;
14
13
  secondaryGrouping: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dots.d.ts","sourceRoot":"","sources":["../../../src/discrete/layers/dots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAGtC,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAM,MAAM,aAAa,CAAC;AAI5D,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAC,EAAE,CAAC;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;CACL,CAAC;AAEF,wBAAgB,WAAW,CACvB,KAAK,EAAE,QAAQ,EACf,YAAY,EAAE;IACV,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB,EACD,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,UAAU,EACb,KAAK,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACrD,SAAS,EAAE,UAAU,GAAG,IAAI,GAC7B,QAAQ,CAkDV"}
1
+ {"version":3,"file":"dots.d.ts","sourceRoot":"","sources":["../../../src/discrete/layers/dots.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;KAAC,EAAE,CAAC;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;CACL,CAAC;AAEF,wBAAgB,WAAW,CACvB,KAAK,EAAE,QAAQ,EACf,YAAY,EAAE;IACV,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB,EACD,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,UAAU,EACb,KAAK,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACrD,SAAS,EAAE,UAAU,GAAG,IAAI,GAC7B,QAAQ,CAkDV"}
@@ -1,46 +1,46 @@
1
1
  import { getOutliersBounds as I } from "../utils/getOutliersBounds.js";
2
- import { getFacetStringKey as y } from "../utils/getFacetStringKey.js";
3
- import F from "../../node_modules/d3-random/src/lcg.js";
4
- import Y from "../../node_modules/d3-array/src/extent.js";
5
- function O(g, i, v, x, b, l) {
6
- let e = 1 / 0, r = -1 / 0;
7
- const G = F(1);
2
+ import "../../utils/TextMeasurer/TextMeasurer.js";
3
+ import { getFacetStringKey as F } from "../utils/getFacetStringKey.js";
4
+ import Y from "../../node_modules/d3-random/src/lcg.js";
5
+ import w from "../../node_modules/d3-array/src/extent.js";
6
+ function V(g, r, i, x, b, c) {
7
+ let o = 1 / 0, s = -1 / 0;
8
+ const y = Y(1);
8
9
  return {
9
10
  type: "dot",
10
- geoms: i.facet.reduce((o, d) => {
11
- const p = y(d);
12
- return o[p] = [], i.primary.forEach((a) => {
13
- i.secondary.forEach((s) => {
14
- const u = v.getRowsByGrouping([...d, a, s]);
15
- if (!u.length)
11
+ geoms: r.facet.reduce((u, p) => {
12
+ const d = F(p);
13
+ return u[d] = [], r.primary.forEach((m) => {
14
+ r.secondary.forEach((a) => {
15
+ const S = i.getRowsByGrouping([...p, m, a]);
16
+ if (!S.length)
16
17
  return;
17
- const S = (t) => Number(t[x.value]);
18
- let n = u.map((t, c) => ({
19
- y: S(t),
20
- jitter: G(),
21
- id: String(l ? t[l.value] : c),
22
- data: t
18
+ const G = (t) => Number(i.getColumnValue(x.value, t)), h = Array.from(S).map(G);
19
+ let e = h.map((t, n) => ({
20
+ y: t,
21
+ id: String(c ? i.getColumnValue(c.value, n) : n),
22
+ jitter: y()
23
23
  }));
24
24
  if (!g.aes.showOutliers) {
25
- const [t, c] = I(u, b.scale, S);
26
- n = n.filter(({ y: h }) => h >= t && h <= c);
25
+ const [t, n] = I(h, b.scale);
26
+ e = e.filter(({ y: v }) => v >= t && v <= n);
27
27
  }
28
- const [f = 1 / 0, m = -1 / 0] = Y(n, (t) => t.y);
29
- f < e && (e = f), m > r && (r = m), o[p].push({
30
- key: `dots_${String(a)}_${String(s)}`,
31
- values: n,
32
- primaryGrouping: String(a),
33
- secondaryGrouping: String(s),
34
- boundsY: { min: f, max: m }
28
+ const [f = 1 / 0, l = -1 / 0] = w(e, (t) => t.y);
29
+ f < o && (o = f), l > s && (s = l), u[d].push({
30
+ key: `dots_${String(m)}_${String(a)}`,
31
+ values: e,
32
+ primaryGrouping: String(m),
33
+ secondaryGrouping: String(a),
34
+ boundsY: { min: f, max: l }
35
35
  });
36
36
  });
37
- }), o;
37
+ }), u;
38
38
  }, {}),
39
- meta: { minY: e, maxY: r },
39
+ meta: { minY: o, maxY: s },
40
40
  aes: g.aes
41
41
  };
42
42
  }
43
43
  export {
44
- O as getDotsData
44
+ V as getDotsData
45
45
  };
46
46
  //# sourceMappingURL=dots.js.map