Problem
Direct scatter markers use fixed screen-space size and opacity at every view scale. A style that is appropriately restrained for a multi-million-point overview becomes nearly invisible after deep zoom; making markers legible when zoomed in makes the overview overplotted and noisy.
This cannot be solved well with a Python on_view_change callback because rebuilding and retransmitting a multi-million-row payload on every view update defeats local WebGL interaction.
Reproduction
xy.scatter(
x,
y,
size=1.3,
opacity=0.2,
density=False,
)
At the initial domain this is readable. After a 16×–100× zoom, isolated points remain 1.3 px at 20% opacity and are difficult to see. Increasing the base size/opacity makes the overview substantially worse.
Proposed API
Support client-side zoom-responsive point styling:
xy.scatter(
x,
y,
size=1.3,
opacity=0.2,
zoom_size_factor=4,
zoom_opacity=0.85,
zoom_emphasis=16,
)
Expected behavior:
- Base size and opacity apply at the initial domain.
- Size and opacity interpolate in logarithmic zoom space.
- Target values are reached at the configured zoom factor and then clamp.
- No trace rebuild, Python callback, or data retransmission occurs.
- Render and pick buffers use identical zoom-adjusted sizes.
- Hover emphasis is derived from the adjusted marker size.
- Defaults preserve current fixed-size behavior.
- Direct and density-to-direct drilldown paths behave consistently.
This allows a clean overview and legible exact points from the same resident WebGL trace.
Problem
Direct scatter markers use fixed screen-space size and opacity at every view scale. A style that is appropriately restrained for a multi-million-point overview becomes nearly invisible after deep zoom; making markers legible when zoomed in makes the overview overplotted and noisy.
This cannot be solved well with a Python
on_view_changecallback because rebuilding and retransmitting a multi-million-row payload on every view update defeats local WebGL interaction.Reproduction
At the initial domain this is readable. After a 16×–100× zoom, isolated points remain 1.3 px at 20% opacity and are difficult to see. Increasing the base size/opacity makes the overview substantially worse.
Proposed API
Support client-side zoom-responsive point styling:
Expected behavior:
This allows a clean overview and legible exact points from the same resident WebGL trace.