holoviz / holoviews

With Holoviews, your data visualizes itself.
https://holoviews.org
BSD 3-Clause "New" or "Revised" License
2.69k stars 402 forks source link

No hover is shown if rasterized inside dynamicmap using apply_when-like logic #6382

Open ahuang11 opened 2 hours ago

ahuang11 commented 2 hours ago
import holoviews as hv
import random

def plot(x_range, y_range):
    points = hv.Points(([0, 0], [0, 0])).opts(
        tools=["hover"], projection=ccrs.GOOGLE_MERCATOR
    )
    if random.choice([True, False]) or x_range is None:
        points = rasterize(points, dynamic=False)
    return hv.Overlay(
        [
            points,
        ]
    ).opts("Points", tools=["hover", "box_select"])

hv.DynamicMap(plot, streams=[hv.streams.RangeXY()])
image

Hover doesn't work if rasterized first.

It works if not rasterized first.

image
ahuang11 commented 2 hours ago

The not-so-workaround is setting points alpha to 0, but I'm sure it has performance implications.

import holoviews as hv
import random

def plot(x_range, y_range):
    points = hv.Points(([0, 0], [0, 0])).opts(
        tools=["hover"], projection=ccrs.GOOGLE_MERCATOR
    )
    raster = rasterize(points, dynamic=False)
    if len(points > 1000):
        points.opts(alpha=0)
    return points * raster

hv.DynamicMap(plot, streams=[hv.streams.RangeXY()])