Just little FYI, this piqued my interest → here’s a basic MRE to create a spline glyph on the JS side:
from bokeh.plotting import figure, show
from bokeh.layouts import column
from bokeh.models import CustomJS, ColumnDataSource, RadioButtonGroup
import numpy as np
src = ColumnDataSource(data={'x':np.arange(25),'y':np.arange(25)})
src.data['y'] = src.data['y']*np.random.random(25)
fig = figure()
rb = RadioButtonGroup(labels=['Line','Spline'],active=0)
rl = fig.line(x='x',y='y',source=src)
cb = CustomJS(args=dict(fig=fig,src=src,rb=rb,rl=rl)
,code='''
if (Bokeh.documents[0].get_model_by_name('spline_rend') == null){
var spl = Bokeh.Models._known_models.get('Spline')
var g = new spl()
g.x = {'field':'x'}
g.y = {'field':'y'}
var r = fig.add_glyph(g,src)
r.name = 'spline_rend'
}
var r = Bokeh.documents[0].get_model_by_name('spline_rend')
if (rb.active == 1){
r.visible = true
rl.visible = false
}
else {
r.visible = false
rl.visible = true
}
'''
)
rb.js_on_change('active',cb)
show(column([fig,rb]))
