CurveEdit#

Download this notebook from GitHub (right-click to download).


Title: CurveEdit Stream#

Description: A linked streams example demonstrating how to use the CurveEdit stream.

Dependencies: Bokeh

Backends: Bokeh

import numpy as np
import holoviews as hv

from holoviews import opts, streams
from holoviews.plotting.links import DataLink

hv.extension('bokeh')

The CurveEdit stream adds a bokeh tool to the source plot, which allows drawing, dragging and deleting points and making the drawn data available to Python. The tool supports the following actions:

Move vertex

Tap and drag an existing vertex, the vertex will be dropped once you let go of the mouse button.

Delete vertex

Tap a vertex to select it then press BACKSPACE or DELETE key while the mouse is within the plot area.

As a simple example we will create a CurveEdit stream and attach it to a Curve with a simple timeseries. By using a DataLink we then link the tool to a Table.

If we select the PointDraw tool () the vertices will appear and allow us to drag and delete vertex. We can also see the x/y position change in the table and edit it. To change the appearance of the vertices we can supply a style to the CurveEdit stream:

curve = hv.Curve(np.random.randn(10).cumsum())

curve_stream = streams.CurveEdit(data=curve.columns(), source=curve, style={'color': 'black', 'size': 10})

table = hv.Table(curve).opts(editable=True)
DataLink(curve, table)

(curve + table).opts(
    opts.Table(editable=True))

Whenever the data source is edited the data is synced with Python, both in the notebook and when deployed on the bokeh server. The data is made available as a dictionary of columns:

curve_stream.data
{'x': [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0],
 'y': [-0.3472969956365617,
  -1.2539917206193214,
  -1.7217706708912466,
  -1.6938692881938164,
  -2.4157576902470796,
  -1.6411850848538947,
  -1.8097342348771497,
  -2.7588749060562097,
  -3.4323558407717236,
  -3.8968613248555086]}

Alternatively we can use the element property to get an Element containing the returned data:

curve_stream.element
This web page was generated from a Jupyter notebook and not all interactivity will work on this website. Right click to download and run locally for full Python-backed interactivity.

Download this notebook from GitHub (right-click to download).