You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#8921 landed the basics of Animated Vega-Lite: a time encoding, a timer point selection, and a frame filter. It deferred interpolation, rescaling, interactive sliders, and data-driven pausing, and hard-errored on multi-view specs.
This issue tracks finishing that work. The implementation splits into small additive PRs rather than one large PR, layered on top of the animation PRs already in flight.
Related: #4060. Closes #9590 (linear and interpolated animations) once #9910 and #9914 land.
Already in flight
One has merged; two remain open, and everything else sits on top of them.
fix(selection): initialize animation selections on the first pulse #9900 — fix(selection): initialize animation selections on the first pulse Merged as 6fd39f971. Compiles an animation's tuple and modify signals as update expressions rather than on handlers, so the store fills on the first pulse instead of one tick late. A headless render now lands on the first frame rather than drawing every frame at once.
C.feat(selection): field-comparison predicates for point selections #9902 — feat(selection): field-comparison predicates for point selections
Adds predicate, which makes a point selection hold a comparison rather than a value. The feature serves ordinary interactions too, and animation depends on it for frames that keep everything up to the clock or a trailing window of it, and for scale binding. Fully self-contained: its example is selection_predicate_cumulative, and the bird migration example that needs it lives in feat(animation): support animation in layered and concatenated views #9915, which adds the layer support its basemap needs.
Every PR targets main, and states its dependencies in its own description rather than encoding them as a base branch. In git each branch still descends from the one before it, and all of them descend from #9535, whose documentation and source changes the stack edits. GitHub therefore shows a cumulative diff: PR #9916 contains every commit from #9535 through #9915 as well as its own.
Landing B and C early pays off: B first removes #9915's cherry-pick, and C first is required to pass CI for every branch #9910 onward.
D.fix(animation): build the animation frame dataset reliably #9903 — fix(animation): build the animation frame dataset reliably
Fixes the bugs in how the per-frame dataset is built and read: where the frame filter is found, when the dataset exists, which marks read it, how its rows are laid out, and how its time field parses.
J.feat(animation): interpolate marks between keyframes with time.key #9914 — feat(animation): interpolate marks between keyframes with time.key
The largest change in the stack. Enables keying so that marks representing the same object interpolate across frames. Also reveals animated line marks from their full geometry, so curve interpolation stays stable as a line extends.
#8921 landed the basics of Animated Vega-Lite: a
timeencoding, atimerpoint selection, and a frame filter. It deferred interpolation, rescaling, interactive sliders, and data-driven pausing, and hard-errored on multi-view specs.This issue tracks finishing that work. The implementation splits into small additive PRs rather than one large PR, layered on top of the animation PRs already in flight.
Related: #4060. Closes #9590 (linear and interpolated animations) once #9910 and #9914 land.
Already in flight
One has merged; two remain open, and everything else sits on top of them.
fix(selection): initialize animation selections on the first pulseMerged as
6fd39f971. Compiles an animation's tuple and modify signals asupdateexpressions rather thanonhandlers, so the store fills on the first pulse instead of one tick late. A headless render now lands on the first frame rather than drawing every frame at once.fix: support animated vega-lite thumbnail rendering with vg2png and vg2svgEvaluates the dataflow and clears animation timers before rendering, so headless renders are deterministic. Unblocked now that fix(selection): initialize animation selections on the first pulse #9900 has merged.
docs: animated time encoding documentation and examplesDocuments the
timechannel and registers the existing animated examples in the gallery. Depends on fix: support animated vega-lite thumbnail rendering with vg2png and vg2svg vega#4061 for deterministic thumbnails.Independent
Reviewable in any order, with no dependency on the animation stack or on each other.
feat(vega-functions): add easing functions and interpolateLinearAdds d3-ease functions and
interpolateLinearto the expression language. Only feat(animation): easing for animated selections #9916 needs it.fix(layer): do not emit duplicate signals for a layer-level selectionFixes a pre-existing bug on
main, unrelated to animation. A selection applied to more than one child of a layer produces duplicate signals and an unparseable spec. 2 files. feat(animation): support animation in layered and concatenated views #9915 needs it.feat(selection): field-comparison predicates for point selectionsAdds
predicate, which makes a point selection hold a comparison rather than a value. The feature serves ordinary interactions too, and animation depends on it for frames that keep everything up to the clock or a trailing window of it, and for scale binding. Fully self-contained: its example isselection_predicate_cumulative, and the bird migration example that needs it lives in feat(animation): support animation in layered and concatenated views #9915, which adds the layer support its basemap needs.feat: add bird migration centroidsAdds dataset of daily population centroids for transatlantic migratory bird species. Needed for the bird migration example in feat(animation): support animation in layered and concatenated views #9915, so M needs to be released before that one merges.
Animation stack — merge in order
Every PR targets
main, and states its dependencies in its own description rather than encoding them as a base branch. In git each branch still descends from the one before it, and all of them descend from #9535, whose documentation and source changes the stack edits. GitHub therefore shows a cumulative diff: PR #9916 contains every commit from #9535 through #9915 as well as its own.Landing B and C early pays off: B first removes #9915's cherry-pick, and C first is required to pass CI for every branch #9910 onward.
fix(animation): build the animation frame dataset reliablyFixes the bugs in how the per-frame dataset is built and read: where the frame filter is found, when the dataset exists, which marks read it, how its rows are laid out, and how its time field parses.
feat(animation): elaborate a time encoding into an animation parameterA
timeencoding now animates on its own, and the normalizer derives the timer parameter, the frame filter, and the projection onto the time field.feat(animation): support linear time scalesAdds continuous playback, makes
{"step": ...}expressible in a spec, and restoresanimationDuration, which docs: animated time encoding documentation and examples #9535 comments out pending this work. Introduces the earthquake example, which feat(animation): support animation in layered and concatenated views #9915 later gives a basemap.feat(animation): recompute scales per frame with time.rescaleEnables updating scales based on the current frame, required for e.g. bar chart races.
feat(animation): support pausing playbackfeat(animation): bind an animated selection to a range inputfeat(animation): interpolate marks between keyframes with time.keyThe largest change in the stack. Enables keying so that marks representing the same object interpolate across frames. Also reveals animated line marks from their full geometry, so curve interpolation stays stable as a line extends.
feat(animation): support animation in layered and concatenated viewsIntroduces the bird migration example (animated points over a basemap layer), so its images depend on M.
feat(animation): easing for animated selectionsRequires A to be released. Only PR in the stack that needs a new Vega.
feat(animation): support animation in faceted viewsBuilds each cell's frame dataset inside its group, which covers the last kind of multi-view composition.
docs(examples): register the animated examples in the galleryCuration only, one file. Merges last, because it registers examples that feat(selection): field-comparison predicates for point selections #9902, feat(animation): support linear time scales #9910, feat(animation): recompute scales per frame with time.rescale #9911, feat(animation): bind an animated selection to a range input #9913, feat(animation): interpolate marks between keyframes with time.key #9914, and feat(animation): support animation in layered and concatenated views #9915 each add. Registering a spec whose PR has not landed breaks
scripts/create-example-pages, which reads every registered spec off disk.