Special-Widgets#

Traitlet-Widgets#

Widget-Properties sind IPython-Traitlets. Um Änderungen vorzunehmen, kann die Methode observe des Widgets zum Registrieren eines callback verwendet werden.

Weitere Informationen erhaltet ihr unter Traitlet events.

[1]:
import bqplot as bq
import ipywidgets as widgets
import numpy as np

### Create random data
size = 2000 # number of rows
scale = 1.
scaleLocal = 20
np.random.seed(0)
x_data = np.arange(size)
y_data = np.cumsum(np.random.randn(size)  * scale) + np.random.randn(size) * scaleLocal


x_sc = bq.LinearScale()
y_sc = bq.LinearScale()

ax_x = bq.Axis(label='X', scale=x_sc, grid_lines='solid', tick_format='0f')
ax_y = bq.Axis(label='Y', scale=y_sc, orientation='vertical', tick_format='0.2f')

line1 = bq.Lines(x=x_data, y=y_data, scales={'x': x_sc, 'y': y_sc} , colors=['blue'],display_legend = False, labels=['y1'],stroke_width = 1.0)

m_fig = dict(left=100, top=50, bottom=50, right=100)
fig = bq.Figure(axes=[ax_x, ax_y], marks=[line1], fig_margin=m_fig)

x_range = widgets.IntRangeSlider(value=[min(x_data),max(x_data)],
                        min=min(x_data),
                        max=max(x_data),
                        step=(max(x_data) - min(x_data)) / 100,
                        description="X Axis",
                        disabled=False,
                        continuous_update=False,
                        orientation='horizontal',
                        readout=True)

def updateXAxis(change):
    #Update X-axis min/max value here
    if change['type'] == 'change' and change['name'] == 'value':
        x_sc.min = change['new'][0]
        x_sc.max = change['new'][1]


x_range.observe(updateXAxis)
widgets.VBox([fig, x_range])

Linking Widgets#

Beim Synchronisieren von Traitlet-Attributen tritt möglicherweise eine Verzögerung aufgrund der Latenz bei der Kommunikation mit dem Server auf. Ihr könnt die Widget-Attribute jedoch auch im Browser entweder uni- oder bidirektional direkt mit den Link-Widgets verknüpfen.

Diese Javascript-Links bleiben auch bestehen, wenn Widgets in HTML-Webseiten ohne Kernel eingebettet werden.

Weitere Informationen erhaltet ihr unter Linking widgets attributes from the client side.

[2]:
#Sliders to change minimum and maximum valuese on x scale of bqplot figure using jslink
x_rangeMin = widgets.IntSlider(min=min(x_data), max=max(x_data),step=(max(x_data) - min(x_data)) / 100, description='Min x scale: ', value=x_sc.min)
x_rangeMax = widgets.IntSlider(min=min(x_data), max=max(x_data), step=(max(x_data) - min(x_data)) / 100, description='Max x scale: ', value=x_sc.max)

widgets.jslink((x_sc, 'min'), (x_rangeMin, 'value'))
widgets.jslink((x_sc, 'max'), (x_rangeMax, 'value'))

widgets.VBox([fig, x_rangeMin,x_rangeMax])