Skip to content

Instantly share code, notes, and snippets.

@robintw
Created November 16, 2020 20:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robintw/5a5f4f847820de9da6db8a14408d71e4 to your computer and use it in GitHub Desktop.
Save robintw/5a5f4f847820de9da6db8a14408d71e4 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import numpy as np\nfrom matplotlib.figure import Figure\nimport panel as pn\nimport panel.widgets as pnw",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "pn.extension()",
"execution_count": 7,
"outputs": [
{
"output_type": "display_data",
"data": {
"application/javascript": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n var skip = [];\n if (window.requirejs) {\n require([], function() {\n })\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) >= 0) { on_load(); continue; }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n\tif (!js_urls.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.2.3.min.js\", \"https://unpkg.com/@holoviz/panel@^0.10.1/dist/panel.min.js\"];\n var css_urls = [\"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/alerts.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/card.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/widgets.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/markdown.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/json.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/dataframe.css\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));",
"application/vnd.holoviews_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n var skip = [];\n if (window.requirejs) {\n require([], function() {\n })\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) >= 0) { on_load(); continue; }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n\tif (!js_urls.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.2.3.min.js\", \"https://unpkg.com/@holoviz/panel@^0.10.1/dist/panel.min.js\"];\n var css_urls = [\"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/alerts.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/card.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/widgets.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/markdown.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/json.css\", \"https://unpkg.com/@holoviz/panel@0.10.1/dist/css/dataframe.css\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n",
"application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def random_imshow(magnitude=5, sigma=2, colormap='viridis'):\n arr = np.random.randn(10,10)\n arr *= sigma\n arr += magnitude\n \n ax = Figure().add_subplot()\n im = ax.imshow(arr, vmin=0, vmax=10, cmap=colormap)\n c = ax.figure.colorbar(im)\n \n return ax.figure",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "magnitude = pnw.IntSlider(end=10, name='value', value=5, value_throttled=5)\ncmap = pnw.RadioButtonGroup(name='cmap', value='viridis', \n options=['viridis', 'plasma', 'inferno', 'magma', 'cividis'])\n\nboundfn = pn.bind(random_imshow, magnitude=magnitude, sigma=3, colormap=cmap)\n\npane = pn.Row(pn.Column(magnitude, cmap), boundfn)\n\npn.state.add_periodic_callback(boundfn, period=100)\n\npane",
"execution_count": 9,
"outputs": [
{
"output_type": "display_data",
"data": {},
"metadata": {}
},
{
"output_type": "execute_result",
"execution_count": 9,
"data": {
"text/html": "<div id='1013'>\n\n\n\n\n\n <div class=\"bk-root\" id=\"e4e3f8e6-db58-4449-a25e-57ee01aaa145\" data-root-id=\"1013\"></div>\n</div>\n<script type=\"application/javascript\">(function(root) {\n function embed_document(root) {\n var docs_json = {\"07c80f36-aa92-4309-8c60-44c724165ea1\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1018\"}],\"margin\":[0,0,0,0],\"name\":\"Row00043\"},\"id\":\"1017\",\"type\":\"Row\"},{\"attributes\":{\"end\":10,\"format\":\"0[.]00\",\"margin\":[5,10,5,10],\"start\":0,\"title\":\"value\",\"value\":5,\"value_throttled\":5},\"id\":\"1015\",\"type\":\"Slider\"},{\"attributes\":{\"children\":[{\"id\":\"1014\"},{\"id\":\"1017\"}],\"margin\":[0,0,0,0],\"name\":\"Row00046\"},\"id\":\"1013\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1015\"},{\"id\":\"1016\"}],\"margin\":[0,0,0,0],\"name\":\"Column00038\"},\"id\":\"1014\",\"type\":\"Column\"},{\"attributes\":{\"client_comm_id\":\"9c339bea0b0d431e954c4529eccf9b09\",\"comm_id\":\"8770c5ff0f5d4157acb2e9711d191f81\",\"plot_id\":\"1013\"},\"id\":\"1019\",\"type\":\"panel.models.comm_manager.CommManager\"},{\"attributes\":{\"active\":0,\"labels\":[\"viridis\",\"plasma\",\"inferno\",\"magma\",\"cividis\"],\"margin\":[5,10,5,10]},\"id\":\"1016\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"height\":345,\"margin\":[5,5,5,5],\"name\":\"ParamFunction00039\",\"text\":\"&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5kAAAKzCAYAAACUFsnCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAABYlAAAWJQFJUiTwAAA45UlEQVR4nO3dfbiVZb0v+u/wjRdFEkglzYWEINbatWVtVFTaqKEHrXSJu65jL2R20kpEvU7Qafmu7HQnGdexZaGnXbRa7g1JuZQUFdBChUJ25XVm4gJiWesY6lJR0FTmc/4wWMFErcE9x8OYfj5d45/xDObzpSkvP773fT+NqqqqAAAAQAG71B0AAACAnsOQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAQA83d+7cnHfeeTn22GOz9957p9Fo5GMf+9gb/pgHHnggEyZMyIABA9K3b9/8h//wH3L99ddn06ZNLUpNu9qt7gAAAED3uuqqq/KLX/wie+21Vw488MD8+te/fsPP/+hHP8rpp5+e3r175yMf+UgGDBiQf/qnf8oFF1yQJUuWZM6cOS1KTjtqVFVV1R0CAADoPosWLcqBBx6YYcOG5b777su4ceNy5pln5nvf+16Xz65fvz7Dhg3Lc889lyVLluRv/uZvkiQvvfRSjjvuuDz44IP5x3/8x3z0ox9t9U+DNmG5LAAA9HDjxo3LIYcckkaj8aafnTt3bp588sl89KMf3TJgJknv3r1z1VVXJUn+/u//vtuy0v4MmQAAwBYLFy5Mkpx00kldro0dOzZ9+/bNAw88kD/84Q+tjkabMGQCAABbPProo0mS4cOHd7m222675eCDD86rr76a1atXtzoabcLBP3S7IUOGZP369Tn44IPrjgIAtLE1a9Zk7733zm9+85u6o+TMM89808NzSlqzZs3r/l1q+fLlRe/13HPPJUn69++/3eub33/22WeL3peew5BJt1u/fn2ee2Z9HnumZ/1r18v771V3hG6xy6t1Jyhvv/3+re4Ixf1/zwyoO0Jx1R6ddUfoFof2e7LuCMVV6XlnBj767H51R+gWg/d+tu4IRW148cW6I2zx61//Oh3/74qMPGSPbr9Xx2MvJ43e3X6fP9fmc0P/nP2dvDUZMul2Bx98cB57ZnWOaJxQd5SifnvWmLojdIve/9bz/vL4f154S90Rirv0f/a8E/1e+aueubdn4bj/u+4Ixb1U9bx/EDj6n6bUHaFbXHL8vLojFHXF3/4iA3vtPCujRh6yR3624KBuv89/Gv8vye4jizeWr2dzU7m50dzW+vXrt/ocbMueTAAAaEKVKp0t+F+rVw+MGDEiSbJy5cou11599dWsWbMmu+22W4YOHdrSXLQPQyYAALDFcccdlyS58847u1y7//77s3HjxowZMya9evVqdTTahCETAACatKnq7PZXq02cODGDBg3KLbfckp///Odb3n/ppZfyd3/3d0mSc889t+W5aB/2ZAIAQA/3wx/+MD/84Q+TJE888USS5MEHH8ykSZOSJIMGDcpXv/rVJMnee++dWbNmZeLEifnP//k/56Mf/WgGDBiQ2267LY8++mgmTpyYj3zkI3X8NGgThkwAAGhClaSzBfslqyQ7eo7r//pf/yvf+c53tnpv9erVW551+Vd/9VdbhswkOfXUU3Pffffl6quvzg9+8IO89NJLGTZsWGbMmJHJkyc7WZY3ZMgEAIAe7rLLLstll132F/2Yo48+OvPnz++eQPRo9mQCAABQjCYTAACa8tojTFpxH2gnmkwAAACK0WQCAEATqiSb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UIwmEwAAmmRPJnSlyQQAAKAYQyYAADSjauGrkJ/85Cc5/fTTM3jw4PTq1SuDBw/O+PHjM3/+/HI34S3PclkAAHgLuOqqq3LxxRdn0KBBOeWUUzJ48OA89dRTWbFiRRYvXpwJEybUHZEewpAJAABNabRoT+aO32POnDm5+OKLc8IJJ+TWW29Nv379trr+yiuv7PA9YDPLZQEAoAfr7OzM1KlT07dv33z/+9/vMmAmye67715DMnoqTSYAADShSlK14EGZO3qLBx54IGvWrMnEiROzzz775I477sgjjzyS3r17Z/To0TnqqKOK5ITNDJkAANCD/exnP0uS7Lfffjn88MPzq1/9aqvrY8eOzdy5c/P2t7+9jnj0QIZMWuKVt/XKug++q+4YRe018Lm6I3SLZ9b3rTtCce+779y6IxS334961R2hvF1aUAfUYPg7f193hOL+j3/+SN0Rivu3F3ve731Jcsi0FXVHKOrpP7yY7Ft3iq216jmZHR0dGTVq1HavLV++/A1/7Lp165IkN954Yw4++ODcc889OeKII7J27dpcdNFFueuuu3LGGWdk8eLFpWPzFmVPJgAA9GCbNm1KklRVlblz5+b444/PXnvtlXe/+92ZN29eDjzwwNx333158MEHa05KT6HJBACAZrWoyRw5cuSbNpavZ5999kmSDB06NO9973u3utanT5+ceOKJufnmm7Ns2TL7MylCkwkAAD3YiBEjkiRve9vbtnt98xD64osvtioSPZwmEwAAmlG15nTZHT1eduzYsdltt93y2GOP5eWXX84ee+yx1fVHHnkkSTJkyJAduxH8kSYTAAB6sEGDBuUjH/lInnvuuVxxxRVbXbv77rtz1113pX///jnppJNqSkhPo8kEAIAebsaMGVm6dGmuvvrq3H///Rk9enTWrl2befPmZdddd82sWbNedzkt/KUMmQAA0Kw2efrSvvvum6VLl+aqq67KvHnz8tBDD6Vfv345+eST86UvfSlHHnlk3RHpQQyZAADwFjBgwIDMmDEjM2bMqDsKPZwhEwAAmlS16BEm0E4c/AMAAEAxmkwAAGhWm+zJhFbSZAIAAFCMJhMAAJpkTyZ0pckEAACgGE0mAAA0o0pr9mTa90mb0WQCAABQjCYTAACa0vjjqxX3gfahyQQAAKAYTSYAADTLfknoQpMJAABAMYZMXtfs2bPT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GVX12qsV94E2oskEAACgGE0mAAA0oZHW7MlsdP8toChNJgAAAMVoMgEAoFm2S0IXmkwAAACK0WQCAECTGp11J4CdjyYTAACAYjSZAADQjCqt2ZNp3ydtRpMJAABAMZpMAABoUiuekwntRpMJAABAMZpMAABoVqXKhG1pMgEAAChGkwkAAE2yJxO60mQCAABQjCYTAACapcmELjSZAAAAFKPJBACAZlQt2pOpLaXNaDIBAAAoxpAJAABAMZbLAgBAsyprWWFbmkwAAACK0WQCAEATGmnNwT+N7r8FFKXJBAAAoBhNJgAANMuWTOhCkwkAAEAxmkwAAGhSK/ZkQrvRZAIAAFCMJhMAAJpRJelsQZWpLaXNaDIBAAAoRpMJAADN0jJCF5pMAAAAitFkAgBAk5wuC11pMgEAAChGkwkAAM2qVJmwLU0mAAD0YE8//XRuuummnHbaaRk2bFj69OmT/v3755hjjsnNN9+czs7OuiPSw2gyAQCgGVWL9mTu4D3mzJmTc889N4MHD864ceNy0EEH5fe//31uvfXWnH322fnxj3+cOXPmpNFolMnLW54hEwAAerDhw4fntttuy8knn5xddvn3hYzTp0/P6NGj84Mf/CC33nprTj/99BpT0pNYLgsAAM2qWvDaQccdd1w++MEPbjVgJsn++++fc845J0myePHiHb8R/JEhEwAA3qJ23333JMluu1ngSDn+awIAgKZUabTkdNnuucerr76a7373u0mSk046qVvuwVuTIZOWWN/ZyIKNu9cdo6hbDl5Yd4Ru8Tf//dy6IxT3yqr9645Q3NP/qef99n3Q1x6uO0K3WDn9fXVHKO7aCd+vO0JxUzf973VH6BbjjvlF3RGKevofN9YdoTYdHR0ZNWrUdq8tX768qa85bdq0PPLII5kwYUJOPPHEHYkHW+l5f0sBAIBWadOnf8ycOTPXXXddDj300MyePbvuOPQwhkwAANjJjRw5sunGcls33HBDzj///Bx22GG59957M2DAgCJfFzZz8A8AALxFXH/99fnCF76Q97znPVm0aFH237/nbSmhfppMAABoQqNKSw7+aRS6xTXXXJNp06blfe97X+6+++4MGjSozBeGbWgyAQCgh7vyyiszbdq0jBo1Kvfee68Bk26lyQQAgGa14gkmO+g73/lOLrnkkuy666459thjM3PmzC6fGTJk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9tpr645IkqlTp+baa6/NwIEDc+qpp2bQoEH553/+59x222159dVX893vfjcf+9jH6o4JUIwhk7Z34oknZsGCBZk5c2bOO++8Le9feOGF+drXvpbPfvazufHGG2tMSJIsXLgwGzZsyMknn5xddvn3RRRPPPFERo8enccffzxz587N6aefXmNK/lRVVfnABz6QNWvW5G//9m/z1a9+1ZC5E5kzZ07+y3/5LznhhBNy6623pl+/fltdf+WVV7L77rvXlI7NnnjiiRxwwAF5+9vfnl/+8pfZd999t1xbtGhRjjvuuBx88MFZvXp1jSkByrJclra2evXqLFiwIEOGDMnnP//5ra5dfvnl2XPPPTN79uxs2LChpoRsdtxxx+WDH/zgVgNmkuy///4555xzkiSLFy+uIRmvZ+bMmVm4cGG+/e1vZ88996w7Dn+is7MzU6dOTd++ffP973+/y4CZxIC5k1i7dm06OztzxBFHbDVgJsm4cePSr1+/PPnkkzWlA+gehkza2sKFC5Mk48eP7zK89OvXL0cffXQ2btyYhx56qI54/Jk2/2V4t912qzkJm3V0dGTatGk5//zzM3bs2LrjsI0HHngga9asyYQJE7LPPvvkjjvuyDXXXJOvf/3r9vjtZA455JDsscceWbZsWZ566qmtrt1///15/vnnc8IJJ9SUDqB7+Bsdbe3RRx9NkgwfPny71w855JAsWLAgK1euzPHHH9/KaPyZNu9HSpKTTjqp5jQkr31PPv7xj+eggw7K9OnT647DdvzsZz9Lkuy33345/PDD86tf/Wqr62PHjs3cuXPz9re/vY54/IkBAwbkmmuuyYUXXpjDDjssp556agYOHJhVq1bltttuywc+8IF885vfrDsmQFGGTNrac889lyTp37//dq9vfv/ZZ59tVST+QtOmTcsjjzySCRMm5MQTT6w7DkmuuOKKrFixIj/96U/Tp0+fuuOwHevWrUvy2oFaBx98cO65554cccQRWbt2bS666KLcddddOeOMMyxB30lMmTIlQ4YMyVlnnZVZs2ZteX/YsGGZNGlSl2W0AO3Ocll6tM3nWjmxdOc0c+bMXHfddTn00EMze/bsuuOQZNmyZZk+fXouuuiiHHXUUXXH4XVs2rQpyWu/x82dOzfHH3989tprr7z73e/OvHnzcuCBB+a+++6zdHYnce2112bixImZNGlSVq1alQ0bNmT58uUZOnRozjzzzHzxi1+sOyJAUYZM2trmpnJzo7mt9evXb/U5dh433HBDzj///Bx22GFZtGhRBgwYUHekt7zNy2SHDx+eK6+8su44vIF99tknSTJ06NC8973v3epanz59tqwKWLZsWcuzsbXFixdn6tSp+dCHPpQZM2Zk6NCh6du3bw4//PDMmzcvBxxwQK677jqnywI9iiGTtjZixIgkycqVK7d7/bHHHkvy+ns2qcf111+fL3zhC3nPe96TRYsWZf/99687EkleeOGFrFy5Mh0dHendu3cajcaW1+WXX54k+cxnPpNGo5EpU6bUG/YtbvPvfW9729u2e33zEPriiy+2KhKv4/bbb0/y2kmy2+rbt29Gjx6dzs7OrFixotXRALqNPZm0tc1/aC9YsCCdnZ1bnTD7/PPPZ8mSJenTp0+OPPLIuiKyjWuuuSbTpk3L+973vtx9990ZNGhQ3ZH4o169euXTn/70dq89/PDDWbFiRY455piMGDHCUtqajR07Nrvttlsee+yxvPzyy9ljjz22uv7II48kSYYMGVJDOv7UH/7whyR53ceUbH5/2+8hQFuroM2NHz++SlLNnDlzq/cvuOCCKkn12c9+tqZkbOuKK66oklSjRo2qnn766brj8Be49NJLqyTVrFmz6o7CH5155plVkurLX/7yVu8vWLCgajQaVf/+/atnnnmmnnBs8T/+x/+oklT77bdf9dvf/nara/Pnz68ajUbVu3fv6qmnnqopIUB5mkza3je+8Y2MGTMmkydPzr333puRI0dm6dKlWbRoUYYPH56rr7667ogk+c53vpNLLrkku+66a4499tjMnDmzy2eGDBmSSZMmtT4ctKEZM2Zk6dKlufrqq3P//fdn9OjRWbt2bebNm5ddd901s2bNet3ltLTOxIkTc8IJJ+See+7JyJEjc9ppp2X//fdPR0dHbr/99lRVla985SsZOHBg3VEBijFk0vbe9a535ec//3kuueSS3HnnnZk/f34GDx6cyZMn59JLL3WgzE5izZo1SV47FfP666/f7mfe//73GzLhz7Tvvvtm6dKlueqqqzJv3rw89NBD6devX04++eR86Utfsk1gJ7HLLrtk/vz5ueGGG3LLLbdk3rx52bhxYwYMGJAJEyZk8uTJGT9+fN0xAYpqVNUfn/EAAAAAO8jpsgAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAivn/AX+KEDGNSVWYAAAAAElFTkSuQmCC&quot; width=&quot;460px&quot; height=&quot;345px&quot; alt=&quot;&quot;&gt;&lt;/img&gt;\",\"width\":460},\"id\":\"1018\",\"type\":\"panel.models.markup.HTML\"}],\"root_ids\":[\"1013\",\"1019\"]},\"title\":\"Bokeh Application\",\"version\":\"2.2.3\"}};\n var render_items = [{\"docid\":\"07c80f36-aa92-4309-8c60-44c724165ea1\",\"root_ids\":[\"1013\"],\"roots\":{\"1013\":\"e4e3f8e6-db58-4449-a25e-57ee01aaa145\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined && root.Bokeh.Panel !== undefined) {\n embed_document(root);\n } else {\n var attempts = 0;\n var timer = setInterval(function(root) {\n if (root.Bokeh !== undefined && root.Bokeh.Panel !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else if (document.readyState == \"complete\") {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);</script>",
"application/vnd.holoviews_exec.v0+json": "",
"text/plain": "Row\n [0] Column\n [0] IntSlider(end=10, name='value', value=5, value_throttled=5)\n [1] RadioButtonGroup(name='cmap', options=['viridis', 'plasma', ...], value='viridis')\n [1] ParamFunction(function)"
},
"metadata": {
"application/vnd.holoviews_exec.v0+json": {
"id": "1013"
}
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"hide_input": false,
"language_info": {
"name": "python",
"version": "3.7.8",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment