Dashboards and Linked Views
Charts in the same browser document can synchronize view ranges without
round-tripping every pan or zoom through Python. Give them the same
link_group and choose the synchronized axes with link_axes.
Use unique group names for independent dashboard regions. Link only x when
panels share time but use different y units. Facet domains remain independent
at runtime by default; opt into synchronized navigation with
facet_chart(..., link="x"), link="y", or link="both". link=True is a
convenient alias for link="both", while False and None disable runtime axis
linking. A linked axis also shares its initial domain, even when its matching
share_x/share_y flag is false. Set link_select=True to echo the same
data-space brush predicate and selection highlighting across the facet panels.
Application-Driven Coordination
Range linking is browser-local. For a stateful dashboard, use on_select or
on_view_change to send a small semantic payload to the host application,
update filters there, and build the affected state-backed charts. XY does not
silently apply an arbitrary cross-filter to unrelated datasets.
Standalone HTML can link ranges and retain local interactions, but it cannot invoke Python callbacks. Notebook widgets and the Reflex live tier can.
Many Charts and the Context Budget
Browsers cap the number of live WebGL contexts on a page. XY's client keeps a default budget of 12: least-recently-visible off-screen charts can be snapshotted and release their contexts, then reacquire one when they return to view or receive pointer interaction.
This makes dashboards with more than 12 total charts practical; it is not a promise that an unlimited number can remain simultaneously visible with live GPU contexts. A layout that keeps more than the budget visible at once can still trigger browser-side context eviction.
For dense dashboards:
- Virtualize or paginate panels that are not visible.
- Prefer facets when panels share one data and layout contract.
- Give each chart an explicit height so responsive layout does not collapse.
- Inspect
memory_report()and avoid retaining unbounded streaming history. - Test scroll recovery and interaction on the browsers used in production.