@fundar/data-chart-telling 1.1.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 +32 -0
- package/README.md +6 -6
- package/dist/configuration/config.svelte.d.ts +1 -1
- package/dist/configuration/config.svelte.js +165 -100
- package/dist/configuration/themes/index.d.ts +5 -1428
- package/dist/index.d.ts +23 -14
- package/dist/index.js +20 -11
- package/dist/layout/base/BasePlotLayout.svelte +115 -50
- 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/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 +4 -0
- package/dist/layout/legend/LegendState.svelte.js +20 -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/Slice.d.ts +5 -1
- package/dist/layout/plot/Slice.js +14 -4
- package/dist/layout/scales/NiceTicks.d.ts +3 -0
- package/dist/layout/scales/NiceTicks.js +4 -0
- package/dist/layout/scales/ScalesLayout.svelte +72 -7
- package/dist/layout/scales/ScalesLayout.svelte.d.ts +5 -0
- package/dist/layout/scales/SveltePlotScale.d.ts +2 -2
- package/dist/layout/scales/SveltePlotScale.js +13 -6
- 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 +80 -21
- package/dist/layout/timeline/TimelineLayout.svelte +1 -1
- package/dist/layout/tooltip/Tooltip.svelte +4 -4
- package/dist/layout/tooltip/Tooltip.svelte.d.ts +4 -4
- package/dist/layout/tooltip/TooltipState.svelte.js +1 -1
- 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/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 +5 -0
- package/dist/phases/data/DataPhase.js +3 -3
- package/dist/phases/data/PlotAxes.d.ts +10 -0
- package/dist/phases/data/PlotAxes.js +14 -1
- package/dist/phases/facet/FacetPanels.d.ts +1 -0
- package/dist/phases/facet/FacetPanels.js +1 -0
- package/dist/phases/mapping/MappingPhase.js +1 -1
- 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.js +21 -7
- package/dist/phases/sharedScales/SharedScalesPhase.d.ts +3 -2
- package/dist/phases/sharedScales/SharedScalesPhase.js +5 -2
- package/dist/phases/statistics/Statistics.d.ts +10 -6
- package/dist/phases/statistics/Statistics.js +20 -10
- package/dist/phases/statistics/StatisticsPhase.js +7 -2
- 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/transforms/ProcessedPositions.js +1 -1
- package/dist/phases/transforms/TransformsPhase.js +49 -3
- 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 +3 -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 +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.js +3 -3
- package/dist/plots/{box → distribution/box}/BoxSummaries.d.ts +2 -2
- package/dist/plots/{box → distribution/box}/BoxSummaries.js +6 -6
- package/dist/plots/{box → distribution/box}/Plot.svelte +2 -2
- package/dist/plots/{box → distribution/box}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{box → distribution/box}/defaults.d.ts +2 -2
- package/dist/plots/{box → distribution/box}/defaults.js +1 -1
- package/dist/plots/{box → distribution/box}/markers.d.ts +2 -2
- 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 +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.js +5 -5
- 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 +6 -6
- package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
- package/dist/plots/{pyramid → distribution/pyramid}/markers.js +6 -6
- 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 +1 -1
- 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 +6 -4
- 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 +2 -2
- package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/markers.js +6 -10
- 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 +2 -2
- 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 +15 -9
- package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
- package/dist/plots/{bar → ranking/bar}/markers.js +8 -17
- 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 +276 -143
- 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 +39 -7
- 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 +5 -2
- 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/index.d.ts +1 -1
- package/dist/types/phases/scales/phase.d.ts +5 -1
- package/dist/types/phases/state.d.ts +15 -2
- package/dist/types/phases/statistics/source.d.ts +3 -1
- package/dist/types/phases/transforms/phase.d.ts +22 -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/{box → distribution/box}/props.d.ts +6 -6
- package/dist/types/plots/{box → distribution/box}/state.d.ts +3 -3
- 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/{histogram → distribution/histogram}/props.d.ts +7 -7
- 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 +1 -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 +2 -2
- package/docs/composer.md +2 -2
- package/docs/concepts.md +1 -1
- package/docs/development.md +1 -1
- package/docs/facets.md +3 -3
- package/docs/getting-started.md +2 -2
- package/docs/legend.md +13 -11
- package/docs/markers.md +29 -27
- 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 -280
- package/docs/scales.md +30 -24
- package/docs/styles-and-segments.md +24 -21
- package/docs/theming.md +23 -20
- package/docs/timeline.md +3 -3
- package/docs/tooltip-and-hover.md +10 -10
- package/docs/transforms-and-statistics.md +13 -12
- package/examples/BarValues.svelte +1 -1
- package/examples/Box.svelte +1 -1
- package/examples/Bullet.svelte +17 -0
- package/examples/Chrome.svelte +1 -1
- package/examples/ChromeOrder.svelte +1 -1
- package/examples/Cleveland.svelte +15 -0
- package/examples/Composer.svelte +2 -2
- package/examples/CustomTooltip.svelte +1 -1
- package/examples/Density.svelte +7 -0
- package/examples/Dumbbell.svelte +16 -0
- package/examples/Facets.svelte +1 -1
- package/examples/FacetsCarousel.svelte +1 -1
- package/examples/FacetsRowsCols.svelte +1 -1
- package/examples/FirstPlot.svelte +1 -1
- package/examples/Forest.svelte +17 -0
- package/examples/Gaps.svelte +2 -2
- package/examples/GroupedBars.svelte +1 -1
- package/examples/Heatmap.svelte +3 -3
- package/examples/HeatmapSegments.svelte +8 -8
- package/examples/Histogram.svelte +1 -1
- package/examples/HorizontalBars.svelte +1 -1
- package/examples/LegendSections.svelte +1 -1
- package/examples/LegendToggle.svelte +1 -1
- package/examples/LineByRegion.svelte +1 -1
- package/examples/LineDates.svelte +1 -1
- package/examples/LineStep.svelte +16 -0
- package/examples/LineStepSegment.svelte +18 -0
- package/examples/Lollipop.svelte +17 -0
- package/examples/Markers.svelte +1 -1
- package/examples/MovingAverage.svelte +1 -1
- package/examples/Pyramid.svelte +9 -2
- package/examples/Regression.svelte +2 -2
- package/examples/ResponsiveLine.svelte +1 -1
- package/examples/Scales.svelte +1 -1
- package/examples/Scatter.svelte +2 -2
- package/examples/SegmentHighlight.svelte +1 -1
- package/examples/Segments.svelte +1 -1
- package/examples/SegmentsBySeries.svelte +1 -1
- package/examples/Slope.svelte +17 -0
- package/examples/Sparkline.svelte +14 -0
- package/examples/StackedArea.svelte +1 -1
- package/examples/StackedBars.svelte +1 -1
- package/examples/TimelinePlayer.svelte +1 -1
- package/examples/TimelineRule.svelte +1 -1
- package/examples/Tooltip.svelte +1 -1
- package/examples/ValueLabels.svelte +1 -1
- 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 +22 -11
- package/llms.txt +32 -4
- package/package.json +10 -1
- 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 -324
- /package/dist/plots/{box → distribution/box}/markers.js +0 -0
- /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/box/props.js → layout/styles/gaps.js} +0 -0
- /package/dist/types/{plots/box/state.js → layout/styles/geo.js} +0 -0
- /package/dist/types/{plots/geo/props.js → layout/styles/values.js} +0 -0
- /package/dist/types/{plots/geo/state.js → markers/axis/violin.js} +0 -0
- /package/dist/types/{plots/heatmap/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
- /package/dist/types/plots/{histogram → correlation/heatmap}/props.js +0 -0
- /package/dist/types/plots/{heatmap → correlation/heatmap}/state.js +0 -0
- /package/dist/types/plots/{line → correlation/scatter}/props.js +0 -0
- /package/dist/types/plots/{histogram → correlation/scatter}/state.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/box}/props.js +0 -0
- /package/dist/types/plots/{line → distribution/box}/state.js +0 -0
- /package/dist/types/plots/{scatter → distribution/density}/props.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/density}/state.js +0 -0
- /package/dist/types/plots/{scatter/state.js → distribution/histogram/props.js} +0 -0
- /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
- /package/dist/{plots/utils → utils}/accessors.js +0 -0
|
@@ -53,7 +53,12 @@ export class StatisticsPhase {
|
|
|
53
53
|
? (state.processedGroups ?? []).map((group) => group.series)
|
|
54
54
|
: resolvedSeries;
|
|
55
55
|
return [
|
|
56
|
-
...Statistics.buildForPlot({
|
|
56
|
+
...Statistics.buildForPlot({
|
|
57
|
+
series: measured,
|
|
58
|
+
statistics,
|
|
59
|
+
valueAxis,
|
|
60
|
+
colorFor: colorForSeries
|
|
61
|
+
}),
|
|
57
62
|
...Statistics.expandMarkers(AuthorMarkers.prepare(positioned, {
|
|
58
63
|
grouping: inheritGrouping ? state.grouping : undefined,
|
|
59
64
|
color: inheritGrouping ? state.color : undefined,
|
|
@@ -61,7 +66,7 @@ export class StatisticsPhase {
|
|
|
61
66
|
flat,
|
|
62
67
|
resolvedSeries,
|
|
63
68
|
scopedGroups: state.scopedGroups
|
|
64
|
-
}), flat)
|
|
69
|
+
}), flat, valueAxis)
|
|
65
70
|
];
|
|
66
71
|
}
|
|
67
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
|
}
|
|
@@ -2,17 +2,19 @@ import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/sourc
|
|
|
2
2
|
/** 2D kernel density over the source's `x` and `y`, drawn as a `density` marker. */
|
|
3
3
|
export class Density2dStatistic {
|
|
4
4
|
static build(source, config) {
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
type: 'density',
|
|
8
|
+
data: source.data,
|
|
9
|
+
x: source.x,
|
|
10
|
+
y: source.y,
|
|
11
|
+
bandwidth: config.bandwidth,
|
|
12
|
+
thresholds: config.thresholds,
|
|
13
|
+
styles: {
|
|
14
|
+
...config.styles,
|
|
15
|
+
stroke: config.styles?.stroke ?? source.color ?? STATISTIC_FALLBACK_COLOR
|
|
16
|
+
}
|
|
15
17
|
}
|
|
16
|
-
|
|
18
|
+
];
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -8,5 +8,5 @@ export declare class DensityStatistic {
|
|
|
8
8
|
* `x` is the value and `y` the density, so it draws on the plot's axes as-is.
|
|
9
9
|
* The output is one derived row per estimate point rather than one per input row.
|
|
10
10
|
*/
|
|
11
|
-
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: DensityStatisticOptions): AreaMarkerConfig;
|
|
11
|
+
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: DensityStatisticOptions): AreaMarkerConfig[];
|
|
12
12
|
}
|
|
@@ -15,15 +15,17 @@ export class DensityStatistic {
|
|
|
15
15
|
kernel: config.kernel,
|
|
16
16
|
bandwidth: config.bandwidth
|
|
17
17
|
});
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
return [
|
|
19
|
+
{
|
|
20
|
+
type: 'area',
|
|
21
|
+
data: result.data,
|
|
22
|
+
x: result.x,
|
|
23
|
+
y: result.y,
|
|
24
|
+
styles: {
|
|
25
|
+
...config.styles,
|
|
26
|
+
fill: config.styles?.fill ?? source.color ?? STATISTIC_FALLBACK_COLOR
|
|
27
|
+
}
|
|
26
28
|
}
|
|
27
|
-
|
|
29
|
+
];
|
|
28
30
|
}
|
|
29
31
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeviationStatisticOptions } from '../../../types/layout/statistics';
|
|
2
|
+
import type { AxisBasedMarkersConfig } from '../../../types/markers/common';
|
|
3
|
+
import { type StatisticSource } from '../../../types/phases/statistics/source';
|
|
4
|
+
/** An estimator of the source's values along the plot's value axis and a band around it, drawn as a `rect` and a `rule` marker, each optionally labelled by a `text` marker. */
|
|
5
|
+
export declare class DeviationStatistic {
|
|
6
|
+
#private;
|
|
7
|
+
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: DeviationStatisticOptions): AxisBasedMarkersConfig[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { deviation, extent, mean, median } from 'd3-array';
|
|
2
|
+
import { resolveAccessor } from '../../../utils/accessors';
|
|
3
|
+
import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/source';
|
|
4
|
+
/** Scales a median absolute deviation to the standard deviation of a normal distribution. */
|
|
5
|
+
const MAD_SCALE = 1.4826;
|
|
6
|
+
const DEFAULT_BAND_OPACITY = 0.15;
|
|
7
|
+
const LABEL_FONT_SIZE = 10;
|
|
8
|
+
/** Pixels between a label and the line it names, and between it and the plot's edge. */
|
|
9
|
+
const LABEL_GAP = 4;
|
|
10
|
+
/** An estimator of the source's values along the plot's value axis and a band around it, drawn as a `rect` and a `rule` marker, each optionally labelled by a `text` marker. */
|
|
11
|
+
export class DeviationStatistic {
|
|
12
|
+
static build(source, config) {
|
|
13
|
+
const axis = source.axis ?? 'y';
|
|
14
|
+
const read = resolveAccessor(source[axis]);
|
|
15
|
+
const values = source.data
|
|
16
|
+
.map((d) => {
|
|
17
|
+
const v = read(d);
|
|
18
|
+
return v instanceof Date ? v.getTime() : typeof v === 'number' ? v : NaN;
|
|
19
|
+
})
|
|
20
|
+
.filter(Number.isFinite);
|
|
21
|
+
if (!values.length)
|
|
22
|
+
return [];
|
|
23
|
+
const center = DeviationStatistic.#estimate(values, config.estimator ?? 'mean');
|
|
24
|
+
const spread = DeviationStatistic.#spread(values, config.spread ?? 'stdev');
|
|
25
|
+
const half = (config.k ?? 1) * spread;
|
|
26
|
+
const color = source.color ?? STATISTIC_FALLBACK_COLOR;
|
|
27
|
+
const markers = [];
|
|
28
|
+
if (config.band !== false) {
|
|
29
|
+
const { label, ...style } = config.band ?? {};
|
|
30
|
+
const [lo, hi] = [center - half, center + half];
|
|
31
|
+
markers.push({
|
|
32
|
+
type: 'rect',
|
|
33
|
+
data: [{ lo, hi }],
|
|
34
|
+
...(axis === 'x' ? { x1: 'lo', x2: 'hi' } : { y1: 'lo', y2: 'hi' }),
|
|
35
|
+
styles: { fillOpacity: DEFAULT_BAND_OPACITY, ...style, fill: style.fill ?? color }
|
|
36
|
+
});
|
|
37
|
+
if (label) {
|
|
38
|
+
const own = label === true ? {} : label;
|
|
39
|
+
const lower = own.edge === 'lower';
|
|
40
|
+
const outside = own.position === 'outside';
|
|
41
|
+
markers.push(DeviationStatistic.#label(axis, lower ? lo : hi, color, lower === outside, {
|
|
42
|
+
text: own.text ?? (config.spread === 'mad' ? 'MAD' : 'STDEV'),
|
|
43
|
+
styles: own.styles
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (config.rule !== false) {
|
|
48
|
+
const { label, ...style } = config.rule ?? {};
|
|
49
|
+
markers.push({
|
|
50
|
+
type: 'rule',
|
|
51
|
+
axis,
|
|
52
|
+
value: center,
|
|
53
|
+
styles: { ...style, stroke: style.stroke ?? color }
|
|
54
|
+
});
|
|
55
|
+
if (label) {
|
|
56
|
+
const own = label === true ? {} : label;
|
|
57
|
+
markers.push(DeviationStatistic.#label(axis, center, color, axis === 'x', {
|
|
58
|
+
text: own.text ?? (config.estimator ?? 'mean').toUpperCase(),
|
|
59
|
+
styles: own.styles
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return markers;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A label beside the line at `position`, against the plot's start edge: a
|
|
67
|
+
* vertical line's reads down from the top, a horizontal line's ends at the
|
|
68
|
+
* right. `towardLower` puts its body on the side of lower values (left of a
|
|
69
|
+
* vertical line, below a horizontal one).
|
|
70
|
+
*/
|
|
71
|
+
static #label(axis, position, color, towardLower, label) {
|
|
72
|
+
const vertical = axis === 'x';
|
|
73
|
+
const fontSize = label.styles?.fontSize ?? LABEL_FONT_SIZE;
|
|
74
|
+
const sign = towardLower ? -1 : 1;
|
|
75
|
+
// A vertical line's text is centred on its own point, so its half-height plus the gap clears the line.
|
|
76
|
+
const gap = LABEL_GAP + (vertical ? fontSize / 2 : 0);
|
|
77
|
+
const [dx, dy] = vertical ? [sign * gap, LABEL_GAP] : [-LABEL_GAP, -sign * gap];
|
|
78
|
+
return {
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: label.text,
|
|
81
|
+
...(vertical ? { x: position } : { y: position }),
|
|
82
|
+
frameAnchor: vertical ? 'top' : 'right',
|
|
83
|
+
styles: {
|
|
84
|
+
fill: color,
|
|
85
|
+
fontSize,
|
|
86
|
+
...(vertical
|
|
87
|
+
? { rotate: 90, textAnchor: 'start', lineAnchor: 'middle' }
|
|
88
|
+
: { textAnchor: 'end', lineAnchor: towardLower ? 'top' : 'bottom' }),
|
|
89
|
+
...label.styles,
|
|
90
|
+
dx: dx + (label.styles?.dx ?? 0),
|
|
91
|
+
dy: dy + (label.styles?.dy ?? 0)
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
static #estimate(values, estimator) {
|
|
96
|
+
if (estimator === 'median')
|
|
97
|
+
return median(values);
|
|
98
|
+
if (estimator === 'midrange') {
|
|
99
|
+
const [lo, hi] = extent(values);
|
|
100
|
+
return (lo + hi) / 2;
|
|
101
|
+
}
|
|
102
|
+
return mean(values);
|
|
103
|
+
}
|
|
104
|
+
static #spread(values, spread) {
|
|
105
|
+
if (spread === 'mad') {
|
|
106
|
+
const mid = median(values);
|
|
107
|
+
return MAD_SCALE * median(values.map((v) => Math.abs(v - mid)));
|
|
108
|
+
}
|
|
109
|
+
return deviation(values) ?? 0;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -8,5 +8,5 @@ export declare class MovingAverageStatistic {
|
|
|
8
8
|
* no dedicated mark for this (unlike `regression`/`bollinger`). `windowY`
|
|
9
9
|
* keeps one output row per input row, so `x` passes straight through.
|
|
10
10
|
*/
|
|
11
|
-
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: MovingAverageStatisticOptions): LineMarkerConfig;
|
|
11
|
+
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: MovingAverageStatisticOptions): LineMarkerConfig[];
|
|
12
12
|
}
|
|
@@ -16,15 +16,17 @@ export class MovingAverageStatistic {
|
|
|
16
16
|
k: config.k,
|
|
17
17
|
reduce: config.reduce ?? 'mean'
|
|
18
18
|
});
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
type: 'line',
|
|
22
|
+
data: result.data,
|
|
23
|
+
x: result.x,
|
|
24
|
+
y: result.y,
|
|
25
|
+
styles: {
|
|
26
|
+
...config.styles,
|
|
27
|
+
stroke: config.styles?.stroke ?? source.color ?? STATISTIC_FALLBACK_COLOR
|
|
28
|
+
}
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
];
|
|
29
31
|
}
|
|
30
32
|
}
|
|
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
|
|
|
5
5
|
export declare class RegressionStatistic {
|
|
6
6
|
static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
|
|
7
7
|
type: 'regression';
|
|
8
|
-
}>): RegressionMarkerConfig;
|
|
8
|
+
}>): RegressionMarkerConfig[];
|
|
9
9
|
}
|
|
@@ -2,20 +2,22 @@ import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/sourc
|
|
|
2
2
|
/** A regression curve over the source, drawn as a `regression` marker (svelteplot fits it at render time). */
|
|
3
3
|
export class RegressionStatistic {
|
|
4
4
|
static build(source, config) {
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
type: 'regression',
|
|
8
|
+
data: source.data,
|
|
9
|
+
x: source.x,
|
|
10
|
+
y: source.y,
|
|
11
|
+
regressionType: config.regressionType,
|
|
12
|
+
order: config.order,
|
|
13
|
+
base: config.base,
|
|
14
|
+
span: config.span,
|
|
15
|
+
confidence: config.confidence,
|
|
16
|
+
styles: {
|
|
17
|
+
...config.styles,
|
|
18
|
+
stroke: config.styles?.stroke ?? source.color ?? STATISTIC_FALLBACK_COLOR
|
|
19
|
+
}
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
];
|
|
20
22
|
}
|
|
21
23
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Transforms } from './Transforms';
|
|
2
|
+
import { ValueSelection } from './ValueSelection';
|
|
3
|
+
import { ProcessedPositions } from './ProcessedPositions';
|
|
2
4
|
import { seriesIdOf } from '../../utils/grouping';
|
|
3
5
|
import { PANEL_KEY } from '../facet/FacetPanels';
|
|
4
|
-
import { resolveAccessor } from '../../
|
|
6
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
5
7
|
import { buildGroupedSeries } from '../../plots/utils/segments';
|
|
6
8
|
import { PlotAxes } from '../data/PlotAxes';
|
|
7
9
|
/** The field each processed row carries its series name under, for its color, legend and labels. */
|
|
@@ -94,12 +96,56 @@ export class TransformsPhase {
|
|
|
94
96
|
};
|
|
95
97
|
return this.#withGroups({ ...state, processedData });
|
|
96
98
|
};
|
|
97
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* `state` with its processed rows split into the visual groups the kind's marks
|
|
101
|
+
* draw (`processedGroups`), and the rows its value labels are written for
|
|
102
|
+
* (`labelled`).
|
|
103
|
+
*/
|
|
98
104
|
#withGroups(state) {
|
|
99
105
|
const processedGroups = this.#options.groups === 'runs'
|
|
100
106
|
? TransformsPhase.#buildRuns(state)
|
|
101
107
|
: TransformsPhase.#buildGroups(state, this.#connect);
|
|
102
|
-
return { ...state, processedGroups };
|
|
108
|
+
return { ...state, processedGroups, ...this.#labelled(state) };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The rows `styles.values` writes labels for, picked per facet panel - a
|
|
112
|
+
* panel's own last row, not the last of every panel - by the author's
|
|
113
|
+
* `select` and `series`, over the plot's own default. Left out while the
|
|
114
|
+
* labels are off, or when the plot picks no rows.
|
|
115
|
+
*/
|
|
116
|
+
#labelled(state) {
|
|
117
|
+
const options = this.#options.labels;
|
|
118
|
+
const values = state.values;
|
|
119
|
+
if (!options || !(values?.show ?? options.show))
|
|
120
|
+
return {};
|
|
121
|
+
const processed = state.processedData;
|
|
122
|
+
const valueAxis = PlotAxes.valueOf(state);
|
|
123
|
+
const select = values?.select ?? options.select;
|
|
124
|
+
const selections = ValueSelection.transforms(select, values?.series, valueAxis);
|
|
125
|
+
const position = ProcessedPositions.of(processed, valueAxis);
|
|
126
|
+
const skip = options.skip?.(state);
|
|
127
|
+
const channels = {
|
|
128
|
+
x: position.x,
|
|
129
|
+
y: position.y,
|
|
130
|
+
group: options.group === 'category'
|
|
131
|
+
? position[PlotAxes.categoryOf(state)]
|
|
132
|
+
: SERIES_ID_KEY
|
|
133
|
+
};
|
|
134
|
+
const panels = new Map();
|
|
135
|
+
for (const row of processed.data) {
|
|
136
|
+
if (skip?.(row))
|
|
137
|
+
continue;
|
|
138
|
+
const bucket = panels.get(row[PANEL_KEY]);
|
|
139
|
+
if (bucket)
|
|
140
|
+
bucket.push(row);
|
|
141
|
+
else
|
|
142
|
+
panels.set(row[PANEL_KEY], [row]);
|
|
143
|
+
}
|
|
144
|
+
const labelled = new Set([...panels.values()].flatMap((rows) => ValueSelection.pick(rows, selections, channels)));
|
|
145
|
+
return {
|
|
146
|
+
labelled: processed.data.filter((row) => labelled.has(row)),
|
|
147
|
+
labelSelects: ValueSelection.selectors(select)
|
|
148
|
+
};
|
|
103
149
|
}
|
|
104
150
|
/** What a gap-filled row carries: its interpolated value and the kind of zone that filled it. */
|
|
105
151
|
static #fillTags(fill) {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ValueSelect } from '../../types/layout/styles';
|
|
2
|
+
import type { MarkerTransform } from '../../types/transforms';
|
|
3
|
+
import type { ProcessedRow } from '../../types/phases';
|
|
4
|
+
/**
|
|
5
|
+
* Which rows of a plot a value label is written for: `styles.values.select`
|
|
6
|
+
* (or the plot's own default) and `series`, run as `filter` and `select`
|
|
7
|
+
* transforms over the processed rows. The labelled rows are the union of what
|
|
8
|
+
* each selector picks, returned as the rows themselves, in their own order.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ValueSelection {
|
|
11
|
+
/** `select` as a list: none is every row. */
|
|
12
|
+
static selectors(select: ValueSelect | ValueSelect[] | undefined): ValueSelect[];
|
|
13
|
+
/**
|
|
14
|
+
* The transforms that pick the rows, one list per selector: the series filter,
|
|
15
|
+
* then the `select` of that selector, with `'min'` and `'max'` read on
|
|
16
|
+
* `valueAxis`. Without selectors, one list that only filters the series.
|
|
17
|
+
*/
|
|
18
|
+
static transforms(select: ValueSelect | ValueSelect[] | undefined, series: string | string[] | undefined, valueAxis: 'x' | 'y'): MarkerTransform[][];
|
|
19
|
+
/**
|
|
20
|
+
* The rows of `rows` that any of `selections` picks, grouped by `group`
|
|
21
|
+
* (a field key or accessor) and compared on `x` and `y` - the value axis'
|
|
22
|
+
* channel is what `'min'` and `'max'` read. A transform returns copies of its
|
|
23
|
+
* rows, so each is traced back to the row it came from.
|
|
24
|
+
*/
|
|
25
|
+
static pick(rows: ProcessedRow[], selections: MarkerTransform[][], channels: {
|
|
26
|
+
x: unknown;
|
|
27
|
+
y: unknown;
|
|
28
|
+
group: unknown;
|
|
29
|
+
}): ProcessedRow[];
|
|
30
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Transforms } from './Transforms';
|
|
2
|
+
import { SERIES_KEY } from './TransformsPhase';
|
|
3
|
+
/** The field a row carries its place in the rows picked from, under which a transform's copy of it is traced back. */
|
|
4
|
+
const PLACE = '__place';
|
|
5
|
+
/**
|
|
6
|
+
* Which rows of a plot a value label is written for: `styles.values.select`
|
|
7
|
+
* (or the plot's own default) and `series`, run as `filter` and `select`
|
|
8
|
+
* transforms over the processed rows. The labelled rows are the union of what
|
|
9
|
+
* each selector picks, returned as the rows themselves, in their own order.
|
|
10
|
+
*/
|
|
11
|
+
export class ValueSelection {
|
|
12
|
+
/** `select` as a list: none is every row. */
|
|
13
|
+
static selectors(select) {
|
|
14
|
+
return select === undefined ? [] : Array.isArray(select) ? select : [select];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The transforms that pick the rows, one list per selector: the series filter,
|
|
18
|
+
* then the `select` of that selector, with `'min'` and `'max'` read on
|
|
19
|
+
* `valueAxis`. Without selectors, one list that only filters the series.
|
|
20
|
+
*/
|
|
21
|
+
static transforms(select, series, valueAxis) {
|
|
22
|
+
const names = series === undefined ? undefined : new Set([series].flat());
|
|
23
|
+
const filter = names
|
|
24
|
+
? [{ type: 'filter', filter: (d) => names.has(String(d[SERIES_KEY])) }]
|
|
25
|
+
: [];
|
|
26
|
+
const selectors = ValueSelection.selectors(select);
|
|
27
|
+
if (selectors.length === 0)
|
|
28
|
+
return [filter];
|
|
29
|
+
return selectors.map((selector) => [
|
|
30
|
+
...filter,
|
|
31
|
+
{
|
|
32
|
+
type: 'select',
|
|
33
|
+
select: selector === 'min' || selector === 'max' ? { [valueAxis]: selector } : selector
|
|
34
|
+
}
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The rows of `rows` that any of `selections` picks, grouped by `group`
|
|
39
|
+
* (a field key or accessor) and compared on `x` and `y` - the value axis'
|
|
40
|
+
* channel is what `'min'` and `'max'` read. A transform returns copies of its
|
|
41
|
+
* rows, so each is traced back to the row it came from.
|
|
42
|
+
*/
|
|
43
|
+
static pick(rows, selections, channels) {
|
|
44
|
+
const placed = rows.map((row, index) => ({ ...row, [PLACE]: index }));
|
|
45
|
+
const chosen = new Set();
|
|
46
|
+
for (const transforms of selections) {
|
|
47
|
+
const picked = Transforms.resolve({ data: placed, ...channels, grouping: channels.group, transforms }, placed);
|
|
48
|
+
for (const row of picked.data ?? placed)
|
|
49
|
+
chosen.add(row[PLACE]);
|
|
50
|
+
}
|
|
51
|
+
return rows.filter((_, index) => chosen.has(index));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
<script lang="ts" generics="TData extends Record<string, unknown>">
|
|
2
|
-
import Plot from '
|
|
2
|
+
import Plot from '../../../layout/plot/Plot.svelte';
|
|
3
3
|
import { buildHeatmapDefaults } from './defaults';
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
HeatmapPlotProps,
|
|
6
|
+
HeatmapPlotCoreProps
|
|
7
|
+
} from '../../../types/plots/correlation/heatmap/props';
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
10
|
* A categorical grid of value-colored cells. Draws from pre-built `series` or flat `data` rows.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Plot from '
|
|
2
|
-
import type { HeatmapPlotProps } from '
|
|
1
|
+
import Plot from '../../../layout/plot/Plot.svelte';
|
|
2
|
+
import type { HeatmapPlotProps } from '../../../types/plots/correlation/heatmap/props';
|
|
3
3
|
declare function $$render<TData extends Record<string, unknown>>(): {
|
|
4
4
|
props: HeatmapPlotProps<TData>;
|
|
5
5
|
exports: {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AxisPlotDefaults } from '
|
|
2
|
-
import type { HeatmapPlotState, HeatmapPlotCtx } from '
|
|
1
|
+
import type { AxisPlotDefaults } from '../../../types/phases';
|
|
2
|
+
import type { HeatmapPlotState, HeatmapPlotCtx } from '../../../types/plots/correlation/heatmap/state';
|
|
3
3
|
/**
|
|
4
4
|
* HeatmapPlot on the shared pipeline: both axes are categories. A heatmap's
|
|
5
5
|
* `color` is each cell's numeric value, which the "data" phase reads as a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ContinuousDomain } from '
|
|
1
|
+
import { ColorRamp } from '../../../utils/color';
|
|
2
|
+
import { OpacityScale } from '../../../utils/OpacityScale';
|
|
3
|
+
import { ContinuousDomain } from '../../../utils/ContinuousDomain';
|
|
4
4
|
import { buildMarks, buildValueLabels } from './markers';
|
|
5
5
|
/**
|
|
6
6
|
* HeatmapPlot's own "scales" output, over the band axes the shared phase laid
|
|
@@ -17,7 +17,7 @@ function extendWithColorScales(state, ctx) {
|
|
|
17
17
|
// active range) keeps the original domain - only which cells are hidden
|
|
18
18
|
// changes (resolved in the "markers" phase).
|
|
19
19
|
const effectiveDomain = ContinuousDomain.ramp(valueDomain, range);
|
|
20
|
-
const colorScale =
|
|
20
|
+
const colorScale = ColorRamp.continuous(cfg, scales.color, effectiveDomain);
|
|
21
21
|
const resolveColor = (row) => colorScale(Number(colorAcc.accessor(row)));
|
|
22
22
|
const opacityAcc = channels.opacity;
|
|
23
23
|
let opacityDomainOut;
|
|
@@ -32,7 +32,7 @@ function extendWithColorScales(state, ctx) {
|
|
|
32
32
|
: [...new Set(rawVals.map(String))];
|
|
33
33
|
if (allNumeric && rawVals.length)
|
|
34
34
|
opacityDomainOut = opacityDomain;
|
|
35
|
-
const opacityScale =
|
|
35
|
+
const opacityScale = OpacityScale.resolve(scales.opacity, opacityDomain, cfg.continuous.opacityRange);
|
|
36
36
|
return (row) => opacityScale(opacityAcc.accessor(row));
|
|
37
37
|
})()
|
|
38
38
|
: undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { TextMarkerConfig } from '
|
|
2
|
-
import type { HeatmapPlotState, HeatmapPlotCtx } from '
|
|
3
|
-
import type { ValueLabels } from '
|
|
4
|
-
import type { AxisBasedMarkersConfig } from '
|
|
1
|
+
import type { TextMarkerConfig } from '../../../types/markers/common';
|
|
2
|
+
import type { HeatmapPlotState, HeatmapPlotCtx } from '../../../types/plots/correlation/heatmap/state';
|
|
3
|
+
import type { ValueLabels } from '../../../layout/styles/ValueLabels';
|
|
4
|
+
import type { AxisBasedMarkersConfig } from '../../../types/markers/common';
|
|
5
5
|
/**
|
|
6
6
|
* HeatmapPlot's `styles.values` as one `'text'` marker over the same cells
|
|
7
7
|
* the plot draws, each labelled with its own value and centred on it. Shown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { LegendState } from '
|
|
2
|
-
import { DisabledStyle } from '
|
|
3
|
-
import { resolveAccessor } from '
|
|
1
|
+
import { LegendState } from '../../../layout/legend/LegendState.svelte';
|
|
2
|
+
import { DisabledStyle } from '../../../layout/legend/DisabledStyle';
|
|
3
|
+
import { resolveAccessor } from '../../../utils/accessors';
|
|
4
4
|
/** A processed channel as a per-row function. */
|
|
5
5
|
function readChannel(channel) {
|
|
6
6
|
return resolveAccessor(channel);
|