Open MP-MaximilianLattka opened 5 months ago
I believe the issue arises when tabs=True
.
A workaround is using Panel:
import panel as pn
import numpy as np
import holoviews as hv
from bokeh.models import BoxZoomTool
pn.extension()
hv.extension("bokeh")
print(f"{hv.__version__=}")
x, y = np.mgrid[-50:51, -50:51] * 0.1
box_zoom = BoxZoomTool(match_aspect=True)
img = hv.Image(np.sin(x**2 + y**2), bounds=(-1, -1, 1, 1))
pn.Tabs(
img.relabel("Image").opts(default_tools=[box_zoom]),
img.sample(x=0).relabel("Cross-section"),
)
I think the tools are dropped when tabs=True
.
import numpy as np
import holoviews as hv
from bokeh.models import BoxZoomTool
hv.extension("bokeh")
print(f"{hv.__version__=}")
x,y = np.mgrid[-50:51, -50:51] * 0.1
box_zoom = BoxZoomTool(match_aspect=True)
img = hv.Image(np.sin(x**2+y**2), bounds=(-1,-1,1,1))
(img.relabel('Image') * img.sample(x=0).relabel('Cross-section')).opts(
tabs=True, default_tools=[box_zoom], data_aspect=1, tools=[box_zoom], active_tools=[box_zoom])
i.e. the pan, zoom tools are still here even though I explicitly set everything.
I suppose if you specify 'Image'
, it works:
import numpy as np
import holoviews as hv
from bokeh.models import BoxZoomTool
hv.extension("bokeh")
print(f"{hv.__version__=}")
x,y = np.mgrid[-50:51, -50:51] * 0.1
box_zoom = BoxZoomTool(match_aspect=True)
img = hv.Image(np.sin(x**2+y**2), bounds=(-1,-1,1,1))
(img.relabel('Image') * img.sample(x=0).relabel('Cross-section')).opts(
"Image", default_tools=[box_zoom], active_tools=[box_zoom]).opts(tabs=True, )
Specifying "Image"
may be a workaround sometimes apparently.
However, I'm working with map data and therefore different objects and this does not suit my issue.
I spent some time creating a minimal example of my particular situation and will update the original description of this issue.
ALL software version info
Python: 3.11.9 JupyterLab: 4.1.5 Holoviews: 1.18.3 Bokeh: 3.3.4 and 3.4.1
Description of expected behavior and the observed behavior
I’ve been plotting map data using holoviews and geoviews with the bokeh backend.
Bokeh has a zoom tool called BoxZoomTool, which allows drawing a rectangle to zoom in. Setting the kwarg
match_aspect=True
results in maintaining the aspect ratio, which is meaningful when working with maps. Apparently, holoviews doesn’t properly use pass theBoxZoomTool
to bokeh as match_aspect=True does not have any effect.Complete, minimal, self-contained example code that reproduces the issue
Working
BoxZoomTool
with native bokeh only (version 3.4.1 and 3.3.4, both working as expected)Non-working holoviews code (version 1.18.3)
Non-working minimal example of my code (version 1.18.3)
Stack traceback and/or browser JavaScript console output
Screenshots or screencasts of the bug in action