VegaFusionWidget provides configurable debouncing to control how frequently user interaction updates are sent from the browser to the Python kernel.
debounce_max_wait properties correspond to the
max_wait properties of the lodash debounce function. VegaFusion uses sensible defaults (
debounce_wait of 30ms and
debounce_max_wait of 60ms), but it can be useful to increase the default values to handle interactions on large datasets.
Here is the specification for a chart that provides histogram data selection on a 10 million row dataset.
import altair as alt from vega_datasets import data import pandas as pd import vegafusion as vf source = pd.concat([data.flights_2k()] * 5000).reset_index() brush = alt.selection(type='interval', encodings=['x']) # Define the base chart, with the common parts of the # background and highlights base = alt.Chart().mark_bar().encode( x=alt.X(alt.repeat('column'), type='quantitative', bin=alt.Bin(maxbins=20)), y='count()' ).properties( width=160, height=130 ) # gray background with selection background = base.encode( color=alt.value('#ddd') ).add_selection(brush) # blue highlights on the transformed data highlight = base.transform_filter(brush) # layer the two charts & repeat chart = alt.layer( background, highlight, data=source ).repeat(column=["distance", "delay"]) widget = vf.jupyter.VegaFusionWidget(chart) widget
Here is what the default interactivity looks like using on a 2015 Macbook pro.
You can see that the server falls behind, resulting in a poor interaction experience.
Debouncing can be adjusted to improve the interaction experience. By setting
debounce_wait to 50ms and
None the client will not send a request to the server until there has been a period of 50ms without any user interaction events. This results in a user interaction experience where the chart is not updated until the full interaction has completed.
vf.jupyter.VegaFusionWidget(chart, debounce_wait=50, debounce_max_wait=None)