@fundar/data-chart-telling 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +58 -19
- package/dist/configuration/config.svelte.d.ts +1 -1
- package/dist/configuration/config.svelte.js +172 -95
- package/dist/configuration/themes/index.d.ts +5 -1304
- package/dist/index.d.ts +24 -14
- package/dist/index.js +20 -10
- package/dist/layout/base/BasePlotLayout.svelte +129 -51
- package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
- package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
- package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
- package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
- package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
- package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
- package/dist/layout/coordinates/ZoomedProjection.js +24 -0
- package/dist/layout/coordinates/camera.svelte.js +11 -8
- package/dist/layout/coordinates/projections/argentina.js +1 -1
- package/dist/layout/coordinates/projections/fit.d.ts +1 -1
- package/dist/layout/coordinates/projections/fit.js +1 -1
- package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
- package/dist/layout/coordinates/zoom.svelte.js +4 -5
- package/dist/layout/facet/FacetLayout.svelte +1 -1
- package/dist/layout/facet/config.js +1 -1
- package/dist/layout/figure/Figure.svelte +2 -0
- package/dist/layout/geometry/GeometryLayout.svelte +14 -9
- package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
- package/dist/layout/geometry/MarkerOffset.svelte +28 -0
- package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
- package/dist/layout/grid/GridCell.svelte +6 -8
- package/dist/layout/hover/HoverSettings.d.ts +20 -6
- package/dist/layout/hover/HoverSettings.js +29 -4
- package/dist/layout/legend/ContinuousSection.svelte +44 -9
- package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
- package/dist/layout/legend/DiscreteSection.svelte +2 -2
- package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
- package/dist/layout/legend/LegendChannels.js +36 -12
- package/dist/layout/legend/LegendLayout.svelte +9 -1
- package/dist/layout/legend/LegendState.svelte.d.ts +9 -0
- package/dist/layout/legend/LegendState.svelte.js +24 -3
- package/dist/layout/legend/SizeSection.svelte +1 -1
- package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
- package/dist/layout/margins/PlotMargins.svelte.js +4 -8
- package/dist/layout/plot/Plot.svelte +6 -3
- package/dist/layout/plot/PublicPlotContext.d.ts +5 -4
- package/dist/layout/plot/PublicPlotContext.js +7 -3
- package/dist/layout/plot/Slice.d.ts +5 -1
- package/dist/layout/plot/Slice.js +18 -6
- package/dist/layout/scales/EdgeTicks.d.ts +39 -0
- package/dist/layout/scales/EdgeTicks.js +82 -0
- package/dist/layout/scales/NiceTicks.d.ts +43 -0
- package/dist/layout/scales/NiceTicks.js +76 -0
- package/dist/layout/scales/ScalesLayout.svelte +133 -34
- package/dist/layout/scales/ScalesLayout.svelte.d.ts +10 -0
- package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
- package/dist/layout/scales/SveltePlotScale.js +86 -0
- package/dist/layout/scales/TickLabels.d.ts +32 -0
- package/dist/layout/scales/TickLabels.js +55 -0
- package/dist/layout/styles/StylesLayout.svelte +2 -2
- package/dist/layout/styles/ValueLabels.d.ts +33 -5
- package/dist/layout/styles/ValueLabels.js +83 -23
- package/dist/layout/timeline/Timeline.svelte +5 -2
- package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
- package/dist/layout/timeline/TimelineLayout.svelte +39 -13
- package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -5
- package/dist/layout/timeline/TimelineRule.svelte +1 -0
- package/dist/layout/timeline/TimelineState.svelte.d.ts +13 -5
- package/dist/layout/timeline/TimelineState.svelte.js +42 -8
- package/dist/layout/timeline/TimelineTime.d.ts +18 -0
- package/dist/layout/timeline/TimelineTime.js +117 -0
- package/dist/layout/tooltip/Tooltip.svelte +10 -7
- package/dist/layout/tooltip/Tooltip.svelte.d.ts +6 -4
- package/dist/layout/tooltip/TooltipState.svelte.d.ts +8 -2
- package/dist/layout/tooltip/TooltipState.svelte.js +23 -4
- package/dist/markers/MarkerKinds.d.ts +5 -0
- package/dist/markers/MarkerKinds.js +1 -0
- package/dist/markers/area/AreaMarker.svelte +15 -63
- package/dist/markers/arrow/ArrowMarker.svelte +51 -9
- package/dist/markers/bar/BarMarker.svelte +8 -4
- package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
- package/dist/markers/box/BoxMarker.svelte +40 -9
- package/dist/markers/delta/Delta.js +1 -1
- package/dist/markers/delta/DeltaMarker.svelte +9 -7
- package/dist/markers/dot/DotMarker.svelte +24 -27
- package/dist/markers/image/ImageMarker.svelte +17 -12
- package/dist/markers/inset/InsetMarker.svelte +2 -2
- package/dist/markers/line/LineMarker.svelte +1 -0
- package/dist/markers/link/LinkMarker.svelte +174 -29
- package/dist/markers/regression/RegressionMarker.svelte +16 -33
- package/dist/markers/rule/RuleMarker.svelte +9 -3
- package/dist/markers/text/Declutter.d.ts +4 -0
- package/dist/markers/text/Declutter.js +26 -11
- package/dist/markers/text/TextMarker.svelte +91 -48
- package/dist/markers/tick/TickMarker.svelte +27 -25
- package/dist/markers/utils/MarkerChannels.d.ts +24 -0
- package/dist/markers/utils/MarkerChannels.js +42 -7
- package/dist/markers/utils/RowOffset.d.ts +23 -0
- package/dist/markers/utils/RowOffset.js +23 -0
- package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
- package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
- package/dist/markers/utils/RowStroke.d.ts +31 -0
- package/dist/markers/utils/RowStroke.js +28 -0
- package/dist/markers/violin/ViolinMarker.svelte +75 -0
- package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
- package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
- package/dist/markers/violin/ViolinProfiles.js +55 -0
- package/dist/markers/waffle/WaffleMarker.svelte +17 -37
- package/dist/phases/Pipeline.d.ts +5 -0
- package/dist/phases/Pipeline.js +8 -2
- package/dist/phases/data/DataPhase.d.ts +5 -11
- package/dist/phases/data/DataPhase.js +14 -11
- package/dist/phases/data/PlotAxes.d.ts +10 -0
- package/dist/phases/data/PlotAxes.js +14 -1
- package/dist/phases/facet/FacetPanels.d.ts +55 -0
- package/dist/phases/facet/FacetPanels.js +96 -0
- package/dist/phases/facet/FacetPhase.d.ts +1 -42
- package/dist/phases/facet/FacetPhase.js +1 -87
- package/dist/phases/hover/HoverPhase.d.ts +6 -43
- package/dist/phases/hover/HoverPhase.js +19 -54
- package/dist/phases/mapping/MappingPhase.d.ts +1 -1
- package/dist/phases/mapping/MappingPhase.js +3 -5
- package/dist/phases/markers/MarkersPhase.js +2 -1
- package/dist/phases/scales/CategoryOrder.d.ts +23 -0
- package/dist/phases/scales/CategoryOrder.js +73 -0
- package/dist/phases/scales/ScalesPhase.d.ts +1 -3
- package/dist/phases/scales/ScalesPhase.js +37 -27
- package/dist/phases/sharedScales/SharedScalesPhase.d.ts +6 -2
- package/dist/phases/sharedScales/SharedScalesPhase.js +14 -8
- package/dist/phases/statistics/Statistics.d.ts +10 -6
- package/dist/phases/statistics/Statistics.js +20 -10
- package/dist/phases/statistics/StatisticsPhase.js +10 -6
- package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
- package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
- package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
- package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
- package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
- package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
- package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
- package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
- package/dist/phases/tooltip/TooltipPhase.d.ts +4 -2
- package/dist/phases/tooltip/TooltipPhase.js +10 -3
- package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
- package/dist/phases/transforms/ProcessedPositions.js +74 -0
- package/dist/phases/transforms/TransformsPhase.d.ts +5 -42
- package/dist/phases/transforms/TransformsPhase.js +67 -58
- package/dist/phases/transforms/ValueSelection.d.ts +30 -0
- package/dist/phases/transforms/ValueSelection.js +53 -0
- package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
- package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
- package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
- package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
- package/dist/plots/{heatmap → correlation/heatmap}/markers.js +4 -3
- package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
- package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
- package/dist/plots/{scatter → correlation/scatter}/defaults.js +6 -5
- package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.js +5 -4
- package/dist/plots/distribution/box/BoxSummaries.d.ts +19 -0
- package/dist/plots/distribution/box/BoxSummaries.js +101 -0
- package/dist/plots/distribution/box/Plot.svelte +42 -0
- package/dist/plots/distribution/box/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/box/defaults.d.ts +12 -0
- package/dist/plots/distribution/box/defaults.js +34 -0
- package/dist/plots/distribution/box/markers.d.ts +12 -0
- package/dist/plots/distribution/box/markers.js +34 -0
- package/dist/plots/distribution/density/Plot.svelte +45 -0
- package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/density/defaults.d.ts +9 -0
- package/dist/plots/distribution/density/defaults.js +29 -0
- package/dist/plots/distribution/density/markers.d.ts +9 -0
- package/dist/plots/distribution/density/markers.js +42 -0
- package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
- package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
- package/dist/plots/{histogram → distribution/histogram}/defaults.js +4 -4
- package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.js +7 -7
- package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
- package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
- package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +7 -6
- package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
- package/dist/plots/{pyramid → distribution/pyramid}/markers.js +8 -11
- package/dist/plots/distribution/violin/Plot.svelte +45 -0
- package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/violin/defaults.d.ts +10 -0
- package/dist/plots/distribution/violin/defaults.js +58 -0
- package/dist/plots/distribution/violin/markers.d.ts +10 -0
- package/dist/plots/distribution/violin/markers.js +71 -0
- package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
- package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/defaults.js +2 -0
- package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/markers.js +2 -3
- package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
- package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
- package/dist/plots/{line → evolution/line}/defaults.js +2 -0
- package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
- package/dist/plots/{line → evolution/line}/markers.js +7 -6
- package/dist/plots/evolution/slope/Plot.svelte +42 -0
- package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
- package/dist/plots/evolution/slope/defaults.d.ts +8 -0
- package/dist/plots/evolution/slope/defaults.js +31 -0
- package/dist/plots/evolution/slope/markers.d.ts +16 -0
- package/dist/plots/evolution/slope/markers.js +79 -0
- package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
- package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
- package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
- package/dist/plots/evolution/sparkline/defaults.js +23 -0
- package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
- package/dist/plots/evolution/sparkline/markers.js +56 -0
- package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
- package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
- package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
- package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
- package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
- package/dist/plots/map/geo/GeoGeometry.js +142 -0
- package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
- package/dist/plots/map/geo/GeoSegments.js +23 -0
- package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
- package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/defaults.js +1 -1
- package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
- package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/hover.js +5 -5
- package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/markers.js +8 -13
- package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
- package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
- package/dist/plots/map/geo/phases/tooltip.js +5 -0
- package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/slices.js +7 -4
- package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
- package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
- package/dist/plots/ranking/bar/defaults.d.ts +16 -0
- package/dist/plots/{bar → ranking/bar}/defaults.js +17 -15
- package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
- package/dist/plots/{bar → ranking/bar}/markers.js +11 -19
- package/dist/plots/ranking/bullet/Plot.svelte +42 -0
- package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
- package/dist/plots/ranking/bullet/defaults.js +24 -0
- package/dist/plots/ranking/bullet/markers.d.ts +10 -0
- package/dist/plots/ranking/bullet/markers.js +90 -0
- package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
- package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
- package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
- package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
- package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
- package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
- package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
- package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
- package/dist/plots/ranking/cleveland/defaults.js +66 -0
- package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
- package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
- package/dist/plots/ranking/dumbbell/defaults.js +19 -0
- package/dist/plots/ranking/forest/Plot.svelte +42 -0
- package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/forest/defaults.d.ts +11 -0
- package/dist/plots/ranking/forest/defaults.js +20 -0
- package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
- package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
- package/dist/plots/ranking/lollipop/defaults.js +18 -0
- package/dist/plots/utils/RowNumbers.d.ts +16 -0
- package/dist/plots/utils/RowNumbers.js +24 -0
- package/dist/plots/utils/gaps.js +1 -1
- package/dist/plots/utils/segments.js +1 -1
- package/dist/types/configuration/styling.d.ts +287 -132
- package/dist/types/layout/composer.d.ts +5 -2
- package/dist/types/layout/coordinates.d.ts +5 -4
- package/dist/types/layout/legend.d.ts +21 -5
- package/dist/types/layout/plot.d.ts +44 -1
- package/dist/types/layout/scales.d.ts +51 -3
- package/dist/types/layout/statistics/deviation.d.ts +40 -0
- package/dist/types/layout/statistics/index.d.ts +7 -2
- package/dist/types/layout/styles/base.d.ts +18 -0
- package/dist/types/layout/styles/bullet.d.ts +25 -0
- package/dist/types/layout/styles/connector.d.ts +98 -0
- package/dist/types/layout/styles/curve.d.ts +11 -0
- package/dist/types/layout/styles/frame.d.ts +17 -0
- package/dist/types/layout/styles/gaps.d.ts +12 -0
- package/dist/types/layout/styles/geo.d.ts +55 -0
- package/dist/types/layout/styles/index.d.ts +8 -0
- package/dist/types/layout/styles/index.js +8 -0
- package/dist/types/layout/styles/values.d.ts +47 -0
- package/dist/types/layout/timeline.d.ts +19 -7
- package/dist/types/layout/tooltip.d.ts +6 -2
- package/dist/types/markers/axis/area.d.ts +2 -2
- package/dist/types/markers/axis/arrow.d.ts +3 -0
- package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
- package/dist/types/markers/axis/bar.d.ts +1 -1
- package/dist/types/markers/axis/box.d.ts +5 -0
- package/dist/types/markers/axis/difference.d.ts +2 -2
- package/dist/types/markers/axis/image.d.ts +3 -2
- package/dist/types/markers/axis/line.d.ts +2 -0
- package/dist/types/markers/axis/rule.d.ts +9 -0
- package/dist/types/markers/axis/trail.d.ts +2 -3
- package/dist/types/markers/axis/violin.d.ts +25 -0
- package/dist/types/markers/basic/dot.d.ts +3 -2
- package/dist/types/markers/basic/text.d.ts +13 -3
- package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
- package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
- package/dist/types/markers/common.d.ts +1 -1
- package/dist/types/markers/common.js +1 -0
- package/dist/types/markers/geo/link.d.ts +5 -1
- package/dist/types/phases/hover/phase.d.ts +6 -0
- package/dist/types/phases/index.d.ts +1 -1
- package/dist/types/phases/scales/phase.d.ts +5 -1
- package/dist/types/phases/state.d.ts +20 -4
- package/dist/types/phases/statistics/phase.d.ts +3 -1
- package/dist/types/phases/statistics/source.d.ts +3 -1
- package/dist/types/phases/transforms/phase.d.ts +32 -0
- package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
- package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
- package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
- package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
- package/dist/types/plots/distribution/box/props.d.ts +10 -0
- package/dist/types/plots/distribution/box/state.d.ts +23 -0
- package/dist/types/plots/distribution/density/props.d.ts +23 -0
- package/dist/types/plots/distribution/density/state.d.ts +6 -0
- package/dist/types/plots/distribution/density/state.js +1 -0
- package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
- package/dist/types/plots/distribution/histogram/props.js +1 -0
- package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
- package/dist/types/plots/distribution/histogram/state.js +1 -0
- package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
- package/dist/types/plots/distribution/pyramid/props.js +1 -0
- package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
- package/dist/types/plots/distribution/pyramid/state.js +1 -0
- package/dist/types/plots/distribution/violin/props.d.ts +23 -0
- package/dist/types/plots/distribution/violin/props.js +1 -0
- package/dist/types/plots/distribution/violin/state.d.ts +6 -0
- package/dist/types/plots/distribution/violin/state.js +1 -0
- package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
- package/dist/types/plots/evolution/area/props.js +1 -0
- package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
- package/dist/types/plots/evolution/area/state.js +1 -0
- package/dist/types/plots/evolution/line/props.d.ts +10 -0
- package/dist/types/plots/evolution/line/props.js +1 -0
- package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
- package/dist/types/plots/evolution/line/state.js +1 -0
- package/dist/types/plots/evolution/slope/props.d.ts +5 -0
- package/dist/types/plots/evolution/slope/props.js +1 -0
- package/dist/types/plots/evolution/slope/state.d.ts +5 -0
- package/dist/types/plots/evolution/slope/state.js +1 -0
- package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
- package/dist/types/plots/evolution/sparkline/props.js +1 -0
- package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
- package/dist/types/plots/evolution/sparkline/state.js +1 -0
- package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
- package/dist/types/plots/map/geo/props.js +1 -0
- package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
- package/dist/types/plots/map/geo/state.js +1 -0
- package/dist/types/plots/props.d.ts +3 -1
- package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
- package/dist/types/plots/ranking/bar/props.js +1 -0
- package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
- package/dist/types/plots/ranking/bar/state.js +1 -0
- package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
- package/dist/types/plots/ranking/bullet/props.js +1 -0
- package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
- package/dist/types/plots/ranking/bullet/state.js +1 -0
- package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
- package/dist/types/plots/ranking/cleveland/props.js +1 -0
- package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
- package/dist/types/plots/ranking/cleveland/state.js +1 -0
- package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
- package/dist/types/plots/ranking/dumbbell/props.js +1 -0
- package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
- package/dist/types/plots/ranking/dumbbell/state.js +1 -0
- package/dist/types/plots/ranking/forest/props.d.ts +23 -0
- package/dist/types/plots/ranking/forest/props.js +1 -0
- package/dist/types/plots/ranking/forest/state.d.ts +5 -0
- package/dist/types/plots/ranking/forest/state.js +1 -0
- package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
- package/dist/types/plots/ranking/lollipop/props.js +1 -0
- package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
- package/dist/types/plots/ranking/lollipop/state.js +1 -0
- package/dist/types/plots/segments/common.d.ts +4 -1
- package/dist/utils/OpacityScale.d.ts +14 -0
- package/dist/utils/OpacityScale.js +43 -0
- package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
- package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
- package/dist/utils/SymbolScale.d.ts +18 -0
- package/dist/utils/SymbolScale.js +29 -0
- package/dist/utils/color/ColorRamp.d.ts +27 -0
- package/dist/utils/color/ColorRamp.js +120 -0
- package/dist/utils/color/CssColor.d.ts +19 -0
- package/dist/utils/color/CssColor.js +114 -0
- package/dist/utils/color/Palette.d.ts +21 -0
- package/dist/utils/color/Palette.js +52 -0
- package/dist/utils/color/index.d.ts +11 -3
- package/dist/utils/color/index.js +14 -3
- package/dist/utils/grouping.js +1 -1
- package/docs/architecture.md +1 -1
- package/docs/chrome.md +39 -8
- package/docs/composer.md +19 -3
- package/docs/concepts.md +1 -1
- package/docs/development.md +14 -5
- package/docs/facets.md +62 -8
- package/docs/getting-started.md +8 -9
- package/docs/legend.md +73 -24
- package/docs/markers.md +45 -32
- package/docs/plots/correlation/heatmap.md +26 -0
- package/docs/plots/correlation/scatter.md +35 -0
- package/docs/plots/distribution/box.md +28 -0
- package/docs/plots/distribution/density.md +26 -0
- package/docs/plots/distribution/histogram.md +33 -0
- package/docs/plots/distribution/pyramid.md +31 -0
- package/docs/plots/distribution/violin.md +35 -0
- package/docs/plots/evolution/area.md +32 -0
- package/docs/plots/evolution/line.md +93 -0
- package/docs/plots/evolution/slope.md +39 -0
- package/docs/plots/evolution/sparkline.md +34 -0
- package/docs/plots/ranking/bar.md +59 -0
- package/docs/plots/ranking/bullet.md +37 -0
- package/docs/plots/ranking/cleveland.md +54 -0
- package/docs/plots/ranking/dumbbell.md +39 -0
- package/docs/plots/ranking/forest.md +40 -0
- package/docs/plots/ranking/lollipop.md +39 -0
- package/docs/plots.md +22 -154
- package/docs/scales.md +50 -27
- package/docs/state.md +1 -1
- package/docs/styles-and-segments.md +96 -39
- package/docs/theming.md +33 -19
- package/docs/timeline.md +62 -28
- package/docs/tooltip-and-hover.md +72 -24
- package/docs/transforms-and-statistics.md +56 -25
- package/examples/BarValues.svelte +2 -2
- package/examples/Box.svelte +7 -0
- package/examples/Bullet.svelte +17 -0
- package/examples/Chrome.svelte +17 -0
- package/examples/ChromeOrder.svelte +18 -0
- package/examples/Cleveland.svelte +15 -0
- package/examples/Composer.svelte +23 -0
- package/examples/CustomTooltip.svelte +21 -14
- package/examples/Density.svelte +7 -0
- package/examples/Dumbbell.svelte +16 -0
- package/examples/Facets.svelte +3 -3
- package/examples/FacetsCarousel.svelte +14 -0
- package/examples/FacetsRowsCols.svelte +23 -0
- package/examples/FirstPlot.svelte +7 -0
- package/examples/Forest.svelte +17 -0
- package/examples/Gaps.svelte +21 -0
- package/examples/GroupedBars.svelte +15 -0
- package/examples/Heatmap.svelte +7 -0
- package/examples/HeatmapSegments.svelte +26 -0
- package/examples/Histogram.svelte +14 -0
- package/examples/HorizontalBars.svelte +15 -0
- package/examples/LegendSections.svelte +27 -0
- package/examples/LegendToggle.svelte +3 -3
- package/examples/LineByRegion.svelte +18 -0
- package/examples/LineDates.svelte +15 -0
- package/examples/LineStep.svelte +16 -0
- package/examples/LineStepSegment.svelte +18 -0
- package/examples/Lollipop.svelte +17 -0
- package/examples/Markers.svelte +27 -0
- package/examples/MovingAverage.svelte +15 -0
- package/examples/Pyramid.svelte +14 -0
- package/examples/Regression.svelte +14 -0
- package/examples/ResponsiveLine.svelte +7 -7
- package/examples/Scales.svelte +26 -0
- package/examples/Scatter.svelte +16 -0
- package/examples/SegmentHighlight.svelte +22 -0
- package/examples/Segments.svelte +11 -3
- package/examples/SegmentsBySeries.svelte +25 -0
- package/examples/Slope.svelte +17 -0
- package/examples/Sparkline.svelte +14 -0
- package/examples/StackedArea.svelte +16 -0
- package/examples/StackedBars.svelte +15 -0
- package/examples/TimelinePlayer.svelte +8 -7
- package/examples/TimelineRule.svelte +19 -0
- package/examples/Tooltip.svelte +3 -3
- package/examples/ValueLabels.svelte +21 -0
- package/examples/Violin.svelte +14 -0
- package/examples/datasets/argentina-chile-trends.ts +34 -0
- package/examples/datasets/commodity-prices.ts +48 -0
- package/examples/datasets/countries-over-time.ts +368 -0
- package/examples/datasets/daily-temperature.ts +121 -0
- package/examples/datasets/earthquakes.ts +977 -0
- package/examples/datasets/flight-routes.ts +29 -0
- package/examples/datasets/height-density.ts +37 -0
- package/examples/datasets/heights.ts +370 -0
- package/examples/datasets/index.ts +24 -0
- package/examples/datasets/inflation-by-region.ts +44 -0
- package/examples/datasets/inflation-ranges.ts +34 -0
- package/examples/datasets/iris-flower.ts +207 -0
- package/examples/datasets/life-expectancy.ts +95 -0
- package/examples/datasets/napoleons-march.ts +182 -0
- package/examples/datasets/penguins.ts +54 -0
- package/examples/datasets/population-by-age-with-gaps.ts +23 -0
- package/examples/datasets/population-by-age.ts +890 -0
- package/examples/datasets/province-population.ts +521 -0
- package/examples/datasets/stock-prices.ts +63 -0
- package/examples/datasets/weather-stations-over-time.ts +31 -0
- package/examples/datasets/weather-stations.ts +22 -0
- package/examples/datasets/wind-vectors.ts +30 -0
- package/examples/datasets/world-temperature.ts +400 -0
- package/llms-full.txt +51 -12
- package/llms.txt +60 -4
- package/package.json +12 -2
- package/dist/layout/scales/buildScale.d.ts +0 -8
- package/dist/layout/scales/buildScale.js +0 -67
- package/dist/layout/scales/niceDomain.d.ts +0 -23
- package/dist/layout/scales/niceDomain.js +0 -59
- package/dist/plots/bar/defaults.d.ts +0 -9
- package/dist/plots/geo/features.svelte.d.ts +0 -5
- package/dist/plots/geo/features.svelte.js +0 -44
- package/dist/plots/geo/phases/tooltip.js +0 -5
- package/dist/plots/utils/geoAccessors.d.ts +0 -72
- package/dist/plots/utils/geoAccessors.js +0 -220
- package/dist/plots/utils/geoSegments.d.ts +0 -29
- package/dist/plots/utils/geoSegments.js +0 -37
- package/dist/types/layout/styles.d.ts +0 -122
- package/dist/types/markers/axis/curveName.d.ts +0 -2
- package/dist/types/plots/line/props.d.ts +0 -10
- package/dist/utils/color/contrast.d.ts +0 -9
- package/dist/utils/color/contrast.js +0 -40
- package/dist/utils/color/cssColor.d.ts +0 -4
- package/dist/utils/color/cssColor.js +0 -77
- package/dist/utils/color/ramp.d.ts +0 -17
- package/dist/utils/color/ramp.js +0 -110
- package/dist/utils/opacity.d.ts +0 -9
- package/dist/utils/opacity.js +0 -38
- package/examples/data.ts +0 -12
- /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
- /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
- /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
- /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
- /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
- /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
- /package/dist/types/{plots/geo/props.js → layout/styles/gaps.js} +0 -0
- /package/dist/types/{plots/geo/state.js → layout/styles/geo.js} +0 -0
- /package/dist/types/{plots/heatmap/props.js → layout/styles/values.js} +0 -0
- /package/dist/types/{plots/heatmap/state.js → markers/axis/violin.js} +0 -0
- /package/dist/types/{plots/histogram/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
- /package/dist/types/plots/{line → correlation/heatmap}/props.js +0 -0
- /package/dist/types/plots/{histogram → correlation/heatmap}/state.js +0 -0
- /package/dist/types/plots/{pyramid → correlation/scatter}/props.js +0 -0
- /package/dist/types/plots/{line → correlation/scatter}/state.js +0 -0
- /package/dist/types/plots/{scatter → distribution/box}/props.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/box}/state.js +0 -0
- /package/dist/types/plots/{scatter/state.js → distribution/density/props.js} +0 -0
- /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
- /package/dist/{plots/utils → utils}/accessors.js +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { resolveAccessor } from '../../
|
|
2
|
-
import { DataPhase } from '../data/DataPhase';
|
|
1
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
3
2
|
/**
|
|
4
3
|
* The "mapping" phase every axis-based plot shares: every channel resolved to
|
|
5
4
|
* a row accessor. `x`/`y` (and `color`) read the first series' own, falling
|
|
6
5
|
* back to the plot's props; `grouping` is the key the "data" phase split rows
|
|
7
|
-
* by (
|
|
6
|
+
* by (its `seriesGrouping`); any other channel resolves only when
|
|
8
7
|
* its prop is set, and a size channel given a number stays that literal size.
|
|
9
8
|
* An unset `x`/`y` reads each row itself, with no `source`.
|
|
10
9
|
*/
|
|
@@ -17,12 +16,11 @@ export class MappingPhase {
|
|
|
17
16
|
run = (state, ctx) => {
|
|
18
17
|
const first = state.resolvedSeries?.[0];
|
|
19
18
|
const identity = { accessor: (d) => d };
|
|
20
|
-
const grouping = DataPhase.buildGrouping(state);
|
|
21
19
|
const size = (value) => typeof value === 'number' ? value : MappingPhase.#channel(value);
|
|
22
20
|
const channels = {
|
|
23
21
|
x: MappingPhase.#channel(first?.x ?? state.x) ?? identity,
|
|
24
22
|
y: MappingPhase.#channel(first?.y ?? state.y) ?? identity,
|
|
25
|
-
grouping: MappingPhase.#channel(
|
|
23
|
+
grouping: MappingPhase.#channel(state.seriesGrouping),
|
|
26
24
|
color: MappingPhase.#channel(first?.color ?? state.color),
|
|
27
25
|
opacity: MappingPhase.#channel(state.opacity),
|
|
28
26
|
symbol: MappingPhase.#channel(state.symbol),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MarkerChannels } from '../../markers/utils/MarkerChannels';
|
|
1
2
|
/**
|
|
2
3
|
* The shared "markers" phase: everything the plot draws, bottom to top - the
|
|
3
4
|
* plot kind's own marks, then what the "statistics" phase left in
|
|
@@ -21,7 +22,7 @@ export class MarkersPhase {
|
|
|
21
22
|
: [];
|
|
22
23
|
return {
|
|
23
24
|
...state,
|
|
24
|
-
markers: [...options.marks(state, ctx), ...(state.markers ?? []), ...valueLabels]
|
|
25
|
+
markers: MarkerChannels.inheritPosition(MarkerChannels.inheritAll([...options.marks(state, ctx), ...(state.markers ?? []), ...valueLabels], state.scales), state.processedData)
|
|
25
26
|
};
|
|
26
27
|
};
|
|
27
28
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PlotAxes } from '../data/PlotAxes';
|
|
2
|
+
import { type IntervalAccessors } from '../../plots/utils/RowNumbers';
|
|
3
|
+
import type { AxisChannelName } from '../../types/layout/mapping';
|
|
4
|
+
import type { CategorySort } from '../../types/layout/scales';
|
|
5
|
+
import type { ProcessedData } from '../../types/phases';
|
|
6
|
+
/**
|
|
7
|
+
* The order of a plot's categories under a declarative `scales.*.sort`: read off
|
|
8
|
+
* the processed rows, by what each category holds on the value axis - its value
|
|
9
|
+
* in a series, the sum of its values, or the spread between its lowest and its
|
|
10
|
+
* highest.
|
|
11
|
+
*/
|
|
12
|
+
export declare class CategoryOrder {
|
|
13
|
+
/** Whether a `sort` is a {@link CategorySort} rather than a comparator. */
|
|
14
|
+
static isDeclarative(sort: unknown): sort is CategorySort;
|
|
15
|
+
/**
|
|
16
|
+
* The categories of `axis`, in the order `sort` gives them; `undefined` without rows to
|
|
17
|
+
* read. The state is whatever has the processed rows and the axes.
|
|
18
|
+
*/
|
|
19
|
+
static of(sort: CategorySort, state: {
|
|
20
|
+
processedData?: ProcessedData;
|
|
21
|
+
axes?: PlotAxes;
|
|
22
|
+
} & IntervalAccessors, axis: AxisChannelName): unknown[] | undefined;
|
|
23
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ProcessedPositions } from '../transforms/ProcessedPositions';
|
|
2
|
+
import { SERIES_KEY } from '../transforms/TransformsPhase';
|
|
3
|
+
import { PlotAxes } from '../data/PlotAxes';
|
|
4
|
+
import { RowNumbers } from '../../plots/utils/RowNumbers';
|
|
5
|
+
import { isGapValue } from '../../plots/utils/gaps';
|
|
6
|
+
/**
|
|
7
|
+
* The order of a plot's categories under a declarative `scales.*.sort`: read off
|
|
8
|
+
* the processed rows, by what each category holds on the value axis - its value
|
|
9
|
+
* in a series, the sum of its values, or the spread between its lowest and its
|
|
10
|
+
* highest.
|
|
11
|
+
*/
|
|
12
|
+
export class CategoryOrder {
|
|
13
|
+
/** Whether a `sort` is a {@link CategorySort} rather than a comparator. */
|
|
14
|
+
static isDeclarative(sort) {
|
|
15
|
+
return typeof sort === 'object' && sort !== null && 'by' in sort;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The categories of `axis`, in the order `sort` gives them; `undefined` without rows to
|
|
19
|
+
* read. The state is whatever has the processed rows and the axes.
|
|
20
|
+
*/
|
|
21
|
+
static of(sort, state, axis) {
|
|
22
|
+
const processed = state.processedData;
|
|
23
|
+
if (!processed)
|
|
24
|
+
return undefined;
|
|
25
|
+
const valueAxis = PlotAxes.valueOf(state);
|
|
26
|
+
const position = ProcessedPositions.of(processed, valueAxis);
|
|
27
|
+
const categoryOf = position[axis];
|
|
28
|
+
const valueOf = position[valueAxis];
|
|
29
|
+
// Each category, in the order the rows give them, with the values it holds.
|
|
30
|
+
const held = new Map();
|
|
31
|
+
for (const row of processed.data) {
|
|
32
|
+
const category = categoryOf(row);
|
|
33
|
+
const key = String(category);
|
|
34
|
+
let entry = held.get(key);
|
|
35
|
+
if (!entry)
|
|
36
|
+
held.set(key, (entry = { category, series: String(row[SERIES_KEY]), values: [], own: [] }));
|
|
37
|
+
const raw = valueOf(row);
|
|
38
|
+
const value = Number(raw);
|
|
39
|
+
if (isGapValue(raw) || !Number.isFinite(value))
|
|
40
|
+
continue;
|
|
41
|
+
entry.values.push(...RowNumbers.interval(state, row, value));
|
|
42
|
+
if (sort.series === undefined || String(row[SERIES_KEY]) === sort.series) {
|
|
43
|
+
entry.own.push(value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const keyOf = (entry) => {
|
|
47
|
+
if (sort.by === 'range') {
|
|
48
|
+
return entry.values.length === 0
|
|
49
|
+
? undefined
|
|
50
|
+
: Math.max(...entry.values) - Math.min(...entry.values);
|
|
51
|
+
}
|
|
52
|
+
return entry.own.length === 0 ? undefined : entry.own.reduce((sum, v) => sum + v, 0);
|
|
53
|
+
};
|
|
54
|
+
const sign = sort.order === 'descending' ? -1 : 1;
|
|
55
|
+
const sorted = (entries) => entries
|
|
56
|
+
.map((entry, index) => ({ entry, index, key: keyOf(entry) }))
|
|
57
|
+
.sort((a, b) => {
|
|
58
|
+
if (a.key === undefined || b.key === undefined) {
|
|
59
|
+
return ((a.key === undefined ? 1 : 0) - (b.key === undefined ? 1 : 0) || a.index - b.index);
|
|
60
|
+
}
|
|
61
|
+
return sign * (a.key - b.key) || a.index - b.index;
|
|
62
|
+
})
|
|
63
|
+
.map(({ entry }) => entry);
|
|
64
|
+
const entries = [...held.values()];
|
|
65
|
+
if (!sort.grouped)
|
|
66
|
+
return sorted(entries).map((entry) => entry.category);
|
|
67
|
+
const bySeries = new Map();
|
|
68
|
+
for (const entry of entries) {
|
|
69
|
+
bySeries.set(entry.series, [...(bySeries.get(entry.series) ?? []), entry]);
|
|
70
|
+
}
|
|
71
|
+
return [...bySeries.values()].flatMap((group) => sorted(group).map((entry) => entry.category));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PlotAxes } from '../data/PlotAxes';
|
|
2
2
|
import type { AxisChannelName } from '../../types/layout/mapping';
|
|
3
|
-
import type { AxisPlotState, AxisPlotCtx, PhaseStage,
|
|
3
|
+
import type { AxisPlotState, AxisPlotCtx, PhaseStage, ScalesStageOptions } from '../../types/phases';
|
|
4
4
|
type AnyAxisState = AxisPlotState<any, any, any, any>;
|
|
5
5
|
/**
|
|
6
6
|
* The shared "scales" phase. Each axis the kind lays out as categories
|
|
@@ -25,7 +25,5 @@ export declare class ScalesPhase<TState extends AnyAxisState, TCtx extends AxisP
|
|
|
25
25
|
/** Whether the kind keeps its categories in the order the data gives them. */
|
|
26
26
|
get keepsDataOrder(): boolean;
|
|
27
27
|
run: (state: TState, ctx: TCtx) => TState;
|
|
28
|
-
/** Every value the plot's own processed rows sit at on one axis. */
|
|
29
|
-
static processedValues(processed: ProcessedData | undefined, axis: AxisChannelName): unknown[];
|
|
30
28
|
}
|
|
31
29
|
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProcessedPositions } from '../transforms/ProcessedPositions';
|
|
2
2
|
import { isGapValue } from '../../plots/utils/gaps';
|
|
3
3
|
import { MarkerAxisValues } from './MarkerAxisValues';
|
|
4
4
|
import { PlotAxes } from '../data/PlotAxes';
|
|
5
|
+
import { CategoryOrder } from './CategoryOrder';
|
|
6
|
+
import { NiceTicks } from '../../layout/scales/NiceTicks';
|
|
5
7
|
import { DISCRETE_SCALE_TYPES } from '../../types/layout/scales';
|
|
6
8
|
const AXES = ['x', 'y'];
|
|
7
9
|
const POSITION_CHANNELS = {
|
|
@@ -52,7 +54,7 @@ export class ScalesPhase {
|
|
|
52
54
|
for (const axis of AXES) {
|
|
53
55
|
const own = ScalesPhase.#defaultsOf(defaults, axis, axes);
|
|
54
56
|
if (axes?.bands.includes(axis)) {
|
|
55
|
-
scales[axis] = this.#band(scales[axis], own,
|
|
57
|
+
scales[axis] = this.#band(scales[axis], own, state, axis);
|
|
56
58
|
continue;
|
|
57
59
|
}
|
|
58
60
|
// The value axis of a plot with categories is never one itself, whatever it was marked as.
|
|
@@ -71,9 +73,14 @@ export class ScalesPhase {
|
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
const fitted = options.fit?.({ ...state, scales }, ctx) ?? {};
|
|
76
|
+
const fittedAxes = [];
|
|
74
77
|
for (const axis of AXES) {
|
|
75
|
-
if (fitted[axis])
|
|
76
|
-
|
|
78
|
+
if (!fitted[axis])
|
|
79
|
+
continue;
|
|
80
|
+
const { fitted: ownDomain, ...fit } = fitted[axis];
|
|
81
|
+
scales[axis] = { ...scales[axis], ...fit };
|
|
82
|
+
if (ownDomain)
|
|
83
|
+
fittedAxes.push(axis);
|
|
77
84
|
}
|
|
78
85
|
for (const axis of AXES) {
|
|
79
86
|
if (axes?.bands.includes(axis) || scales[axis]?.domain)
|
|
@@ -86,24 +93,32 @@ export class ScalesPhase {
|
|
|
86
93
|
const aggregated = (processedData?.transforms.length ?? 0) > 0 && zero.has(axis);
|
|
87
94
|
if (!derived.length && !ranged && !aggregated)
|
|
88
95
|
continue;
|
|
89
|
-
const own = numeric(
|
|
96
|
+
const own = numeric(ProcessedPositions.values(processedData, axis));
|
|
90
97
|
if (!own)
|
|
91
98
|
continue;
|
|
92
99
|
const values = [...own, ...derived, ...(zero.has(axis) ? [0] : [])];
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
const lo = Math.min(...values);
|
|
101
|
+
const hi = Math.max(...values);
|
|
102
|
+
const author = scales[axis];
|
|
103
|
+
// Niced here, with a tolerance, so parts that add up to a whole land on its tick.
|
|
104
|
+
const niced = author?.nice !== false && author?.ticks == null && hi > lo;
|
|
105
|
+
scales[axis] = niced
|
|
106
|
+
? {
|
|
107
|
+
...author,
|
|
108
|
+
domain: NiceTicks.fit(state, axis, lo, hi, NiceTicks.toleranceOf(author?.nice)),
|
|
109
|
+
nice: false
|
|
110
|
+
}
|
|
111
|
+
: { ...author, domain: [lo, hi], nice: author?.nice ?? true };
|
|
98
112
|
}
|
|
99
|
-
const next = { ...state, scales };
|
|
113
|
+
const next = { ...state, scales, ...(fittedAxes.length ? { fittedAxes } : {}) };
|
|
100
114
|
return options.extend ? options.extend(next, ctx) : next;
|
|
101
115
|
};
|
|
102
116
|
/** A category axis as a band scale: the kind's options under the author's, in the order the kind asks for. */
|
|
103
|
-
#band(author, own,
|
|
117
|
+
#band(author, own, state, axis) {
|
|
118
|
+
const processed = state.processedData;
|
|
104
119
|
const given = author ?? {};
|
|
105
120
|
const type = given.type === undefined || given.type === 'auto' || given.type === 'categorical'
|
|
106
|
-
? 'band'
|
|
121
|
+
? (own.type ?? 'band')
|
|
107
122
|
: given.type;
|
|
108
123
|
const band = { ...own, ...given, type };
|
|
109
124
|
// A padding the author gives replaces the kind's own inner and outer ones.
|
|
@@ -115,23 +130,18 @@ export class ScalesPhase {
|
|
|
115
130
|
band.paddingOuter = given.padding;
|
|
116
131
|
}
|
|
117
132
|
}
|
|
133
|
+
// A sort by what the categories hold is read here, off the rows; the axis then draws from its domain.
|
|
134
|
+
if (CategoryOrder.isDeclarative(band.sort)) {
|
|
135
|
+
const order = band.domain ? undefined : CategoryOrder.of(band.sort, state, axis);
|
|
136
|
+
delete band.sort;
|
|
137
|
+
if (order)
|
|
138
|
+
band.domain = order;
|
|
139
|
+
}
|
|
118
140
|
if (this.keepsDataOrder && !band.domain) {
|
|
119
|
-
band.domain = [...new Set(
|
|
141
|
+
band.domain = [...new Set(ProcessedPositions.values(processed, axis))];
|
|
120
142
|
}
|
|
121
143
|
return band;
|
|
122
144
|
}
|
|
123
|
-
/** Every value the plot's own processed rows sit at on one axis. */
|
|
124
|
-
static processedValues(processed, axis) {
|
|
125
|
-
if (!processed)
|
|
126
|
-
return [];
|
|
127
|
-
return POSITION_CHANNELS[axis].flatMap((name) => {
|
|
128
|
-
const channel = processed.channels[name];
|
|
129
|
-
if (channel === undefined)
|
|
130
|
-
return [];
|
|
131
|
-
const read = resolveAccessor(channel);
|
|
132
|
-
return processed.data.map((row) => read(row));
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
145
|
/** The axes `refs` name, by name or by the role they play in this state. */
|
|
136
146
|
static #axesOf(refs, state) {
|
|
137
147
|
return (refs ?? []).map((ref) => ref === 'value'
|
|
@@ -147,7 +157,7 @@ export class ScalesPhase {
|
|
|
147
157
|
}
|
|
148
158
|
/** How far an axis reaches from zero: the largest magnitude its rows, and the gaps filled in between them, sit at. */
|
|
149
159
|
static #reachOf(state, axis) {
|
|
150
|
-
const rows =
|
|
160
|
+
const rows = ProcessedPositions.values(state.processedData, axis)
|
|
151
161
|
.filter((v) => !isGapValue(v))
|
|
152
162
|
.map((v) => Math.abs(Number(v)));
|
|
153
163
|
const filled = [...(state.gapFillMaps?.values() ?? [])].flatMap((fills) => [...fills.values()].map((fill) => Math.abs(fill.value)));
|
|
@@ -2,7 +2,7 @@ import { ScalesPhase } from '../scales/ScalesPhase';
|
|
|
2
2
|
import type { PlotAxes } from '../data/PlotAxes';
|
|
3
3
|
import type { AxisChannelName } from '../../types/layout/mapping';
|
|
4
4
|
import type { FacetStageState, PhaseStage, ProcessedData, SharedAxisValues, SharedScalesOptions } from '../../types/phases';
|
|
5
|
-
import type { AxisBasedScalesConfig } from '../../types/layout/scales';
|
|
5
|
+
import type { AxisBasedScalesConfig, NiceOption } from '../../types/layout/scales';
|
|
6
6
|
/** One channel's shared scale: its domain, and whether svelteplot may still round it. */
|
|
7
7
|
type SharedScale = {
|
|
8
8
|
domain: unknown[];
|
|
@@ -13,6 +13,10 @@ type SharedScalesState = FacetStageState & {
|
|
|
13
13
|
axes?: PlotAxes;
|
|
14
14
|
processedData?: ProcessedData;
|
|
15
15
|
markers?: object[];
|
|
16
|
+
scales?: Partial<Record<AxisChannelName, {
|
|
17
|
+
nice?: NiceOption;
|
|
18
|
+
sort?: unknown;
|
|
19
|
+
}>>;
|
|
16
20
|
sharedScales?: Record<string, AxisBasedScalesConfig<never>>;
|
|
17
21
|
};
|
|
18
22
|
/**
|
|
@@ -38,7 +42,7 @@ export declare class SharedScalesPhase<TState extends SharedScalesState, TCtx> i
|
|
|
38
42
|
* count derived from each panel's height, which over-rounds short panels and
|
|
39
43
|
* can disagree between panels of different heights.
|
|
40
44
|
*/
|
|
41
|
-
static buildSharedAxisScale(slices: SharedAxisValues[], axis: AxisChannelName): SharedScale;
|
|
45
|
+
static buildSharedAxisScale(slices: SharedAxisValues[], axis: AxisChannelName, niceTolerance?: number): SharedScale;
|
|
42
46
|
/**
|
|
43
47
|
* Where one panel's rows and markers sit on each axis, read off a pipeline
|
|
44
48
|
* run over every panel - or, without a `panel`, where all of them sit.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProcessedPositions } from '../transforms/ProcessedPositions';
|
|
2
|
+
import { NiceTicks } from '../../layout/scales/NiceTicks';
|
|
3
|
+
import { CategoryOrder } from '../scales/CategoryOrder';
|
|
2
4
|
import { ScalesPhase } from '../scales/ScalesPhase';
|
|
3
5
|
import { Pipeline } from '../Pipeline';
|
|
4
|
-
import { PANEL_KEY,
|
|
6
|
+
import { PANEL_KEY, FacetPanels } from '../facet/FacetPanels';
|
|
5
7
|
import { isFacetWrap } from '../../layout/facet/config';
|
|
6
8
|
import { MarkerAxisValues } from '../scales/MarkerAxisValues';
|
|
7
9
|
/** Natural ascending order, as svelteplot sorts a band domain. */
|
|
@@ -38,7 +40,9 @@ export class SharedScalesPhase {
|
|
|
38
40
|
// A symmetric axis has no domain but the one the kind's "scales" phase gives it.
|
|
39
41
|
const fromPhase = new Set([
|
|
40
42
|
...(this.#options?.fromScalesPhase ?? []),
|
|
41
|
-
...this.#scales.symmetricAxes(state)
|
|
43
|
+
...this.#scales.symmetricAxes(state),
|
|
44
|
+
// A category axis ordered by what its categories hold takes the order the "scales" phase reads off every row.
|
|
45
|
+
...(state.axes?.bands ?? []).filter((axis) => CategoryOrder.isDeclarative(state.scales?.[axis]?.sort))
|
|
42
46
|
]);
|
|
43
47
|
const layout = {
|
|
44
48
|
band: [...(state.axes?.bands ?? [])],
|
|
@@ -49,7 +53,7 @@ export class SharedScalesPhase {
|
|
|
49
53
|
/** The channel's domain over `members` panels, or every row without them. */
|
|
50
54
|
const domainOver = (channel, members) => {
|
|
51
55
|
if (fromPhase.has(channel)) {
|
|
52
|
-
const scoped = members ?
|
|
56
|
+
const scoped = members ? FacetPanels.narrowToPanels(state, members) : state;
|
|
53
57
|
const scales = this.#kindScales.run(scoped, ctx).scales;
|
|
54
58
|
const domain = scales?.[channel]?.domain;
|
|
55
59
|
return domain === undefined ? undefined : { domain };
|
|
@@ -59,7 +63,7 @@ export class SharedScalesPhase {
|
|
|
59
63
|
const values = members
|
|
60
64
|
? members.map((panel) => SharedScalesPhase.buildPanelAxisValues(state, panel, layout))
|
|
61
65
|
: [SharedScalesPhase.buildPanelAxisValues(state, undefined, layout)];
|
|
62
|
-
return SharedScalesPhase.buildSharedAxisScale(values, channel);
|
|
66
|
+
return SharedScalesPhase.buildSharedAxisScale(values, channel, NiceTicks.toleranceOf(state.scales?.[channel]?.nice));
|
|
63
67
|
};
|
|
64
68
|
const cache = new Map();
|
|
65
69
|
const scalesOf = (place) => {
|
|
@@ -103,7 +107,7 @@ export class SharedScalesPhase {
|
|
|
103
107
|
* count derived from each panel's height, which over-rounds short panels and
|
|
104
108
|
* can disagree between panels of different heights.
|
|
105
109
|
*/
|
|
106
|
-
static buildSharedAxisScale(slices, axis) {
|
|
110
|
+
static buildSharedAxisScale(slices, axis, niceTolerance) {
|
|
107
111
|
const values = slices
|
|
108
112
|
.flatMap((slice) => slice[axis])
|
|
109
113
|
.filter((v) => v != null && v !== '' && !(typeof v === 'number' && !Number.isFinite(v)));
|
|
@@ -119,7 +123,9 @@ export class SharedScalesPhase {
|
|
|
119
123
|
const numbers = slices.some((slice) => slice.zero.includes(axis))
|
|
120
124
|
? [...values, 0]
|
|
121
125
|
: values;
|
|
122
|
-
|
|
126
|
+
const lo = Math.min(...numbers);
|
|
127
|
+
const hi = Math.max(...numbers);
|
|
128
|
+
return { domain: NiceTicks.domain(lo, hi, 10, niceTolerance), nice: false };
|
|
123
129
|
}
|
|
124
130
|
if (values.every((v) => v instanceof Date)) {
|
|
125
131
|
const times = values.map((d) => +d);
|
|
@@ -139,7 +145,7 @@ export class SharedScalesPhase {
|
|
|
139
145
|
};
|
|
140
146
|
const markers = (state.markers ?? []).filter((marker) => inPanel(marker[PANEL_KEY]));
|
|
141
147
|
const values = (axis) => [
|
|
142
|
-
...
|
|
148
|
+
...ProcessedPositions.values(processed, axis),
|
|
143
149
|
...MarkerAxisValues.of(markers, axis)
|
|
144
150
|
];
|
|
145
151
|
return {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { StatisticSource } from '../../types/phases/statistics/source';
|
|
2
|
+
import type { AxisChannelName } from '../../types/layout/mapping';
|
|
2
3
|
import type { Series } from '../../types/plots/data/common';
|
|
3
4
|
import type { StatisticConfig } from '../../types/layout/statistics';
|
|
4
5
|
import type { AxisBasedMarkersConfig } from '../../types/markers/common';
|
|
@@ -10,12 +11,13 @@ import type { AxisBasedMarkersConfig } from '../../types/markers/common';
|
|
|
10
11
|
export declare class Statistics {
|
|
11
12
|
#private;
|
|
12
13
|
/**
|
|
13
|
-
* Builds one {@link StatisticConfig} over a data source into the
|
|
14
|
-
* renders as
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* Builds one {@link StatisticConfig} over a data source into the markers it
|
|
15
|
+
* renders as. Every statistic's own `build` returns a list, since one can
|
|
16
|
+
* draw several markers (`deviation`'s band and rule); `regression`/`bollinger`
|
|
17
|
+
* construct their marker directly (svelteplot resolves the curve/band
|
|
18
|
+
* itself, at render time), the others compute their rows first.
|
|
17
19
|
*/
|
|
18
|
-
static buildMarker<T extends Record<string, unknown>>(source: StatisticSource<T>, config: StatisticConfig): AxisBasedMarkersConfig;
|
|
20
|
+
static buildMarker<T extends Record<string, unknown>>(source: StatisticSource<T>, config: StatisticConfig): AxisBasedMarkersConfig[];
|
|
19
21
|
/**
|
|
20
22
|
* Resolves a plot's own top-level `statistics` prop against its already-built
|
|
21
23
|
* `Series<T>[]` (every kind has this before `mapping` runs - see
|
|
@@ -30,6 +32,8 @@ export declare class Statistics {
|
|
|
30
32
|
static buildForPlot<T extends Record<string, unknown>>(args: {
|
|
31
33
|
series: Series<T>[];
|
|
32
34
|
statistics: StatisticConfig[] | undefined;
|
|
35
|
+
/** The axis the plot measures along, from its `PlotAxes`. */
|
|
36
|
+
valueAxis?: AxisChannelName;
|
|
33
37
|
colorFor?: (seriesName: string) => string;
|
|
34
38
|
}): AxisBasedMarkersConfig[];
|
|
35
39
|
/**
|
|
@@ -49,5 +53,5 @@ export declare class Statistics {
|
|
|
49
53
|
*/
|
|
50
54
|
static expandMarkers<TMarker extends {
|
|
51
55
|
type: string;
|
|
52
|
-
}, T extends Record<string, unknown>>(markers: TMarker[], fallbackData: T[]): (TMarker | AxisBasedMarkersConfig)[];
|
|
56
|
+
}, T extends Record<string, unknown>>(markers: TMarker[], fallbackData: T[], valueAxis?: AxisChannelName): (TMarker | AxisBasedMarkersConfig)[];
|
|
53
57
|
}
|
|
@@ -6,6 +6,7 @@ import { Density2dStatistic } from './methods/Density2dStatistic';
|
|
|
6
6
|
import { BoxStatistic } from './methods/BoxStatistic';
|
|
7
7
|
import { RegressionStatistic } from './methods/RegressionStatistic';
|
|
8
8
|
import { BollingerStatistic } from './methods/BollingerStatistic';
|
|
9
|
+
import { DeviationStatistic } from './methods/DeviationStatistic';
|
|
9
10
|
/**
|
|
10
11
|
* The statistics a plot or a marker asks for, as the markers they draw as.
|
|
11
12
|
* Each statistic type is a class of its own under `methods/`; the same
|
|
@@ -13,10 +14,11 @@ import { BollingerStatistic } from './methods/BollingerStatistic';
|
|
|
13
14
|
*/
|
|
14
15
|
export class Statistics {
|
|
15
16
|
/**
|
|
16
|
-
* Builds one {@link StatisticConfig} over a data source into the
|
|
17
|
-
* renders as
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* Builds one {@link StatisticConfig} over a data source into the markers it
|
|
18
|
+
* renders as. Every statistic's own `build` returns a list, since one can
|
|
19
|
+
* draw several markers (`deviation`'s band and rule); `regression`/`bollinger`
|
|
20
|
+
* construct their marker directly (svelteplot resolves the curve/band
|
|
21
|
+
* itself, at render time), the others compute their rows first.
|
|
20
22
|
*/
|
|
21
23
|
static buildMarker(source, config) {
|
|
22
24
|
switch (config.type) {
|
|
@@ -32,6 +34,8 @@ export class Statistics {
|
|
|
32
34
|
return RegressionStatistic.build(source, config);
|
|
33
35
|
case 'bollinger':
|
|
34
36
|
return BollingerStatistic.build(source, config);
|
|
37
|
+
case 'deviation':
|
|
38
|
+
return DeviationStatistic.build(source, config);
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
41
|
/** Narrows a `Series`'s own `Accessor<T,AxisValue>` to a source's field-key-or-function shape - safe in practice, since a real row's field key is always a string. */
|
|
@@ -52,7 +56,7 @@ export class Statistics {
|
|
|
52
56
|
* accessor). Named `series`: one statistic per listed series.
|
|
53
57
|
*/
|
|
54
58
|
static buildForPlot(args) {
|
|
55
|
-
const { series, statistics, colorFor } = args;
|
|
59
|
+
const { series, statistics, valueAxis, colorFor } = args;
|
|
56
60
|
if (!statistics?.length || !series.length)
|
|
57
61
|
return [];
|
|
58
62
|
return statistics.flatMap((stat) => {
|
|
@@ -62,9 +66,10 @@ export class Statistics {
|
|
|
62
66
|
data: pooled,
|
|
63
67
|
x: Statistics.#accessor(series[0].x),
|
|
64
68
|
y: Statistics.#accessor(series[0].y),
|
|
69
|
+
axis: valueAxis,
|
|
65
70
|
color: colorFor?.(series[0].name)
|
|
66
71
|
};
|
|
67
|
-
return
|
|
72
|
+
return Statistics.buildMarker(source, stat);
|
|
68
73
|
}
|
|
69
74
|
const names = stat.series ?? series.map((s) => s.name);
|
|
70
75
|
return names.flatMap((name) => {
|
|
@@ -75,9 +80,10 @@ export class Statistics {
|
|
|
75
80
|
data: match.data,
|
|
76
81
|
x: Statistics.#accessor(match.x),
|
|
77
82
|
y: Statistics.#accessor(match.y),
|
|
83
|
+
axis: valueAxis,
|
|
78
84
|
color: colorFor?.(name)
|
|
79
85
|
};
|
|
80
|
-
return
|
|
86
|
+
return Statistics.buildMarker(source, stat);
|
|
81
87
|
});
|
|
82
88
|
});
|
|
83
89
|
}
|
|
@@ -128,7 +134,7 @@ export class Statistics {
|
|
|
128
134
|
* (neither field) always falls through the guard below untouched, and a
|
|
129
135
|
* future "common" marker kind is eligible with no extra bookkeeping here.
|
|
130
136
|
*/
|
|
131
|
-
static expandMarkers(markers, fallbackData) {
|
|
137
|
+
static expandMarkers(markers, fallbackData, valueAxis) {
|
|
132
138
|
return markers.flatMap((marker) => {
|
|
133
139
|
const statable = marker;
|
|
134
140
|
const { x, y } = statable;
|
|
@@ -137,7 +143,11 @@ export class Statistics {
|
|
|
137
143
|
if (!statable.statistics?.length || !isAccessor(x) || !isAccessor(y))
|
|
138
144
|
return [marker];
|
|
139
145
|
const data = statable.data ?? fallbackData;
|
|
140
|
-
const accessors = {
|
|
146
|
+
const accessors = {
|
|
147
|
+
x: x,
|
|
148
|
+
y: y,
|
|
149
|
+
axis: valueAxis
|
|
150
|
+
};
|
|
141
151
|
// A marker's `color` channel groups it: each statistic is then derived per
|
|
142
152
|
// group, in that group's own color - same as a plot's statistics per series.
|
|
143
153
|
const colorFn = statable.color
|
|
@@ -146,7 +156,7 @@ export class Statistics {
|
|
|
146
156
|
const flatColor = Statistics.#markerBaseColor(statable);
|
|
147
157
|
const derived = statable.statistics.flatMap((stat) => {
|
|
148
158
|
if (!colorFn || !statable.color || stat.pooled) {
|
|
149
|
-
return
|
|
159
|
+
return Statistics.buildMarker({ data, ...accessors, color: flatColor }, stat);
|
|
150
160
|
}
|
|
151
161
|
return Statistics.#groupRowsByColor(data, statable.color).flatMap((rows) => Statistics.buildMarker({ data: rows, ...accessors, color: colorFn(rows[0]) }, stat));
|
|
152
162
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AuthorMarkers } from './AuthorMarkers';
|
|
2
2
|
import { Statistics } from './Statistics';
|
|
3
|
-
import { PANEL_KEY,
|
|
4
|
-
import { TransformsPhase } from '../transforms/TransformsPhase';
|
|
3
|
+
import { PANEL_KEY, FacetPanels } from '../facet/FacetPanels';
|
|
5
4
|
import { PlotAxes } from '../data/PlotAxes';
|
|
6
5
|
/** Marker kinds that draw from a channel pair, so they take the plot's `x`/`y` when the author leaves one out. */
|
|
7
6
|
const POSITIONED_KINDS = new Set(['line', 'area', 'dot']);
|
|
@@ -25,7 +24,7 @@ export class StatisticsPhase {
|
|
|
25
24
|
run = (state) => {
|
|
26
25
|
if (!state.panels)
|
|
27
26
|
return { ...state, markers: this.#resolve(state) };
|
|
28
|
-
const markers = state.panels.flatMap((panel) => this.#resolve(
|
|
27
|
+
const markers = state.panels.flatMap((panel) => this.#resolve(FacetPanels.narrowToPanel(state, panel.key)).map((marker) => ({ ...marker, [PANEL_KEY]: panel.key })));
|
|
29
28
|
return { ...state, markers };
|
|
30
29
|
};
|
|
31
30
|
#resolve(state) {
|
|
@@ -51,10 +50,15 @@ export class StatisticsPhase {
|
|
|
51
50
|
// A series setting no value of its own (a histogram's) measures its processed rows: its bins.
|
|
52
51
|
const valueAxis = PlotAxes.valueOf(state);
|
|
53
52
|
const measured = state.processedData && resolvedSeries.some((s) => s[valueAxis] === undefined)
|
|
54
|
-
?
|
|
53
|
+
? (state.processedGroups ?? []).map((group) => group.series)
|
|
55
54
|
: resolvedSeries;
|
|
56
55
|
return [
|
|
57
|
-
...Statistics.buildForPlot({
|
|
56
|
+
...Statistics.buildForPlot({
|
|
57
|
+
series: measured,
|
|
58
|
+
statistics,
|
|
59
|
+
valueAxis,
|
|
60
|
+
colorFor: colorForSeries
|
|
61
|
+
}),
|
|
58
62
|
...Statistics.expandMarkers(AuthorMarkers.prepare(positioned, {
|
|
59
63
|
grouping: inheritGrouping ? state.grouping : undefined,
|
|
60
64
|
color: inheritGrouping ? state.color : undefined,
|
|
@@ -62,7 +66,7 @@ export class StatisticsPhase {
|
|
|
62
66
|
flat,
|
|
63
67
|
resolvedSeries,
|
|
64
68
|
scopedGroups: state.scopedGroups
|
|
65
|
-
}), flat)
|
|
69
|
+
}), flat, valueAxis)
|
|
66
70
|
];
|
|
67
71
|
}
|
|
68
72
|
}
|
|
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
|
|
|
5
5
|
export declare class BollingerStatistic {
|
|
6
6
|
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
|
|
7
7
|
type: 'bollinger';
|
|
8
|
-
}>): BollingerMarkerConfig;
|
|
8
|
+
}>): BollingerMarkerConfig[];
|
|
9
9
|
}
|
|
@@ -2,17 +2,19 @@ import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/sourc
|
|
|
2
2
|
/** Bollinger bands over the source, drawn as a `bollinger` marker (svelteplot computes them at render time). */
|
|
3
3
|
export class BollingerStatistic {
|
|
4
4
|
static build(source, config) {
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
type: 'bollinger',
|
|
8
|
+
data: source.data,
|
|
9
|
+
x: source.x,
|
|
10
|
+
y: source.y,
|
|
11
|
+
n: config.n,
|
|
12
|
+
k: config.k,
|
|
13
|
+
styles: {
|
|
14
|
+
...config.styles,
|
|
15
|
+
stroke: config.styles?.stroke ?? source.color ?? STATISTIC_FALLBACK_COLOR
|
|
16
|
+
}
|
|
15
17
|
}
|
|
16
|
-
|
|
18
|
+
];
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
|
|
|
5
5
|
export declare class BoxStatistic {
|
|
6
6
|
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
|
|
7
7
|
type: 'box';
|
|
8
|
-
}>): BoxMarkerConfig;
|
|
8
|
+
}>): BoxMarkerConfig[];
|
|
9
9
|
}
|
|
@@ -2,17 +2,19 @@ import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/sourc
|
|
|
2
2
|
/** Box-and-whisker summary of the source, drawn as a `box` marker. */
|
|
3
3
|
export class BoxStatistic {
|
|
4
4
|
static build(source, config) {
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
type: 'box',
|
|
8
|
+
data: source.data,
|
|
9
|
+
x: source.x,
|
|
10
|
+
y: source.y,
|
|
11
|
+
sort: config.sort,
|
|
12
|
+
bar: { fill: source.color ?? STATISTIC_FALLBACK_COLOR, ...config.bar },
|
|
13
|
+
rule: config.rule,
|
|
14
|
+
dot: config.dot,
|
|
15
|
+
tickMedian: config.tickMedian,
|
|
16
|
+
tickMinMax: config.tickMinMax
|
|
17
|
+
}
|
|
18
|
+
];
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
|
|
|
5
5
|
export declare class Density2dStatistic {
|
|
6
6
|
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
|
|
7
7
|
type: 'density2d';
|
|
8
|
-
}>): DensityMarkerConfig;
|
|
8
|
+
}>): DensityMarkerConfig[];
|
|
9
9
|
}
|