Skip to content

Add zoom-responsive size and opacity for direct scatter points #88

Description

@Kastier1

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions