javascript - 如何直接从 javascript 访问和修改现有的 Bokeh 图元素?

标签 javascript plot bokeh

我正在使用 Bokeh 和 Flask 开发应用程序。 使用服务器端 python 代码,它会生成一个嵌入网页的绘图,其中包含旨在配置绘图的各种用户输入元素。

我知道从 Bokeh v0.12.x 开始,有一个 API 允许直接从 javascript 创建和操作绘图。

我在这里缺少的一点是,Bokeh javascript 对象开始,我如何列出和访问已经实例化的图形对象(figureline, ColumnDataSource, ...)? 使用 BokehJS API,我将能够编写 javascript 代码来翻译网页用户事件(复选框、按钮点击、文本输入,...)到图上的操作(更改线条颜色,隐藏线条,更新数据点值,...)。

最佳答案

考虑这个非常基本的例子。我希望它可以帮助您入门。

两个 slider 改变中间点的 xy 坐标。

from bokeh.plotting import figure
from bokeh.resources import CDN
from bokeh.embed import file_html
from bokeh.models import ColumnDataSource
from jinja2 import Template

source = ColumnDataSource(data=dict(x=[1, 2, 3],
                                    y=[3, 2, 1]),
                          name='my-data-source')

p = figure()
l1 = p.line("x", "y", source=source)

# copied and modified default file.html template used for e.g. `file_html`
html_template = Template("""
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>{{ title|e if title else "Bokeh Plot" }}</title>
        {{ bokeh_css }}
        {{ bokeh_js }}
        <style>
          html {
            width: 100%;
            height: 100%;
          }
          body {
            width: 90%;
            height: 100%;
            margin: auto;
          }
        </style>
        <script>
            function change_ds_value(name, idx, value) {
                var ds = Bokeh.documents[0].get_model_by_name('my-data-source');
                ds.data[name][idx] = value;
                ds.change.emit();
            }
        </script>
    </head>
    <body>
        <div>
            {{ plot_div|indent(8) }}
            {{ plot_script|indent(8) }}
            <input type='range' min='-5' max='5'
                   onchange='change_ds_value("x", 1, this.value)'/>
            <input type='range' min='-5' max='5'
                   onchange='change_ds_value("y", 1, this.value)'/>
        </div>
    </body>
</html>
""")

html = file_html(p, CDN, template=html_template)
with open('test.html', 'wt') as f:
    f.write(html)

关于javascript - 如何直接从 javascript 访问和修改现有的 Bokeh 图元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46979431/

相关文章:

javascript - 有没有办法安排这两个链接,这样链接就不会被写两次?

javascript - 获取 promise 数组中的值

javascript - Bokeh 如何存储日期时间信息

python - Bokeh 水平堆叠条形图

python - 如何在带有一些空单元格的 Bokeh 中创建绘图网格

javascript - 删除javascript数组中的数据列

javascript - 创建从一个对象到另一个对象的动态线 Three.js

Java JFreeChart - 绘图未更新

r - 如何删除图的轴和R中的图内容之间的图边距?

python - 何时使用 cla()、clf() 或 close() 清除绘图