Just discovered I can update ECharts without a live kernel: https://dapper-kitten-77a3f8.netlify.app/
import inspect
import panel as pn
pn.extension('echarts')
def create_panel():
import pscript
import js2py
Math = js2py.eval_js('Math')
def sin_array(arr, q):
return [3 * Math.sin(q*i) for i in arr]
xs = [i for i in range(0,100)]
ys = sin_array(xs, 1)
echart = {
'title': {
'text': 'ECharts entry example'
},
'tooltip': {},
'legend': {
'data':['Sales']
},
'xAxis': {
'data': xs
},
'yAxis': {},
'series': [{
'name': 'Sales',
'type': 'line',
'data': ys
}],
};
slider = pn.widgets.FloatSlider(name='Line Width', start=0.001, step = 0.001, end=10, format='1[.]000')
sin_array_js = pscript.py2js(sin_array)
echart_pane = pn.pane.ECharts(echart, height=480, width=640)
slider.jscallback(args={'ech': echart_pane}, value= sin_array_js + """
//console.log(ech.data.xAxis.data);
ech.data.series[0].data= sin_array(ech.data.xAxis.data, cb_obj.value)
ech.properties.data.change.emit()
""")
return pn.Column(slider, echart_pane)
pn.Column(
pn.pane.Markdown('''
# Holoviz Panel Static Site Generator
I love Panel, but sometimes I don't have a live kernel (and Pyodide is overkill).
___
'''),
create_panel,
pn.pane.Markdown(f'''
``python\n
{inspect.getsource(create_panel)}\n
``
'', width = 800
)
).save('index.html')
(change double ticks to triple ticks in the code to make it work)