Skip to content

Commit 82ab659

Browse files
committed
Change default behavior to not exceed interval
1 parent e5bc323 commit 82ab659

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

holoviews/plotting/bokeh/links.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,15 @@ def __init__(self, root_model, link, source_plot, target_plot):
142142
continue
143143

144144
axes[f'{axis}_range'] = target_plot.handles[f'{axis}_range']
145+
interval = getattr(link, f'intervals{axis}', None)
146+
if interval is not None and bokeh34:
147+
min, max = interval
148+
if min is not None:
149+
axes[f'{axis}_range'].min_interval = min
150+
if max is not None:
151+
axes[f'{axis}_range'].max_interval = max
152+
self._set_range_for_interval(axes[f'{axis}_range'], max)
153+
145154
bounds = getattr(link, f'bounds{axis}', None)
146155
if bounds is not None:
147156
start, end = bounds
@@ -152,19 +161,27 @@ def __init__(self, root_model, link, source_plot, target_plot):
152161
axes[f'{axis}_range'].end = end
153162
axes[f'{axis}_range'].reset_end = end
154163

155-
interval = getattr(link, f'intervals{axis}', None)
156-
if interval is not None and bokeh34:
157-
min, max = interval
158-
if min is not None:
159-
axes[f'{axis}_range'].min_interval = min
160-
if max is not None:
161-
axes[f'{axis}_range'].max_interval = max
162-
163164
tool = RangeTool(**axes)
164165
source_plot.state.add_tools(tool)
165166
if toolbars:
166167
toolbars[0].tools.append(tool)
167168

169+
def _set_range_for_interval(self, axis, max):
170+
# Changes the existing Range1d axis range to be in the interval
171+
for n in ("", "reset_"):
172+
start = getattr(axis, f"{n}start")
173+
try:
174+
end = start + max
175+
except Exception as e:
176+
# Handle combinations of datetime axis and timedelta interval
177+
# Likely a better way to do this
178+
try:
179+
import pandas as pd
180+
end = (pd.array([start]) + pd.array([max]))[0]
181+
except Exception:
182+
raise e from None
183+
setattr(axis, f"{n}end", end)
184+
168185

169186
class DataLinkCallback(LinkCallback):
170187
"""

0 commit comments

Comments
 (0)