В bqplot уже есть встроенный интерактив для панорамирования и масштабирования, я не думаю, что вам нужно создавать свои собственные взаимодействия. Посмотрите на примеры в этом блокноте.
https://github.com/bloomberg/bqplot/blob/master/examples/Interactions/Interaction%20Layer.ipynb.
Вам нужно добавить дополнительную строку, чтобы построить взаимодействие. Вы можете передать одну или две шкалы в словаре, здесь я ограничил х. Затем передайте объект PanZoom с интерактивным kwarg при создании рисунка.
panzoom = PanZoom(scales={'x': [x_sc]})
fig = Figure(axes=[ax_x, ax_y], marks=[data_values], fig_margin=m_fig, interaction=panzoom)
Полный пример:
from bqplot import *
from ipywidgets import *
import numpy as np
x_data = np.linspace(1,101)
y_data = np.linspace(1,101)
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='X', scale=x_sc, grid_lines='solid', tick_format='0f')
ax_y = Axis(label='Y', scale=y_sc, orientation='vertical', tick_format='0.2f')
scatter = Scatter(x=x_data, y=y_data, scales={'x': x_sc, 'y': y_sc})
m_fig = dict(left=100, top=50, bottom=50, right=100)
panzoom = PanZoom(scales={'x': [x_sc]})
fig = Figure(axes=[ax_x, ax_y], marks=[scatter], fig_margin=m_fig, interaction=panzoom)
x_range = IntRangeSlider(value=[0,1000],
min=0,
max=2000,
step=1,
description="X Axis",
disabled=False,
continuous_update=False,
orientation='horizontal',
readout=True)
fig