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': [np.float64(0.0),
np.float64(1.0),
np.float64(2.0),
np.float64(3.0),
np.float64(4.0),
np.float64(5.0),
np.float64(6.0),
np.float64(7.0),
np.float64(8.0),
np.float64(9.0)],
'y': [np.float64(-0.9561346521094739),
np.float64(-0.48805591551212213),
np.float64(-0.8119766038034242),
np.float64(-0.4004809207712439),
np.float64(-1.1161129490343877),
np.float64(-1.157100314905629),
np.float64(-2.296641767460829),
np.float64(-1.9269747864774929),
np.float64(-2.199893049782185),
np.float64(-2.202877615392461)]}
Alternatively we can use the element
property to get an Element containing the returned data:
curve_stream.element
Download this notebook from GitHub (right-click to download).