python - Bokeh :使用复选框小部件隐藏和显示图

标签 python widget bokeh

我在使用 Bokeh 的 Widget 回调时遇到了一些困难。在复选框小部件的帮助下,我想显示/隐藏相应的绘图。

this question的区别,是我想要每个字形的图(而不是同一图上的所有字形)。对于 example ,如果我勾选/取消勾选“b”,我想看到一个新的字形图。

编辑:我的代码的新版本

    from bokeh.io import output_file, show
    from bokeh.layouts import column, widgetbox, row
    from bokeh.models import ColumnDataSource
    from bokeh.plotting import figure
    from bokeh.models.widgets import CheckboxGroup
    from bokeh.models import CustomJS
    import pandas as pd
    import numpy as np

    if __name__ == '__main__':

        # Plot tools
        TOOLS = 'box_select,box_zoom,reset'

        # Data Source
    df = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
    source = ColumnDataSource(df)

    # Create a new glyph and share ranges
    g = figure(plot_width=1300, plot_height=150, title='a', tools=TOOLS)
    g.circle(source=source, x='a', y='a')

    glyph_list = []

    for glyph in range(0, len(source.column_names)):
        glyph_list.append((figure(plot_width=1300, plot_height=150, x_range=g.x_range, title=source.column_names[glyph],
                                 tools=TOOLS)))

        glyph_list[glyph].circle(source=source, x='a', y=source.column_names[glyph])

    # Select the glyphs to plot
    initial_list = [0] * len(source.column_names)

    ## example of a change
    initial_list[2] = 1

    # Callback
    code = """
            ????
          """

    callback = CustomJS(args=dict(source=source), code=code) #????

    # Add checkbox widget
    checkbox_group = CheckboxGroup(labels=source.column_names,
                                   callback=callback,
                                   active=initial_list)

    plot_list = []
    for i in range(0, len(source.column_names)):
        if checkbox_group.active[i] == 1:
            plot_list.append(glyph_list[i])

    checkbox_group.js_on_change('active', callback) # ???


    layout = row(column(plot_list), widgetbox(checkbox_group))
    show(layout)

最佳答案

使用 Python on_click 处理程序而不是 CustomJS 回调更容易实现它:

from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import CheckboxGroup
from bokeh.plotting import curdoc, figure
from bokeh.client import push_session
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4), columns = ['a', 'b', 'c', 'd'])
source = ColumnDataSource(df)

def checkbox_click_handler(selected_checkboxes):
    visible_glyphs = layout.children
    for index, glyph in enumerate(glyph_list):
        if index in selected_checkboxes:
            if glyph not in visible_glyphs:
                layout.children.append(glyph)
        else:
            if glyph in visible_glyphs:
                layout.children.remove(glyph)

checkbox_group = CheckboxGroup(labels = list(df.columns.values), active = [0, 1, 2, 3, 4])
checkbox_group.on_click(checkbox_click_handler)

layout = column()
layout.children.append(checkbox_group)

glyph_list = []
for index, letter in enumerate(df.columns.values):
    glyph = figure(plot_width = 800, plot_height = 240, title = letter, name = letter)
    glyph.circle(source = source, x = 'a', y = letter)
    glyph_list.append(glyph)
    layout.children.append(glyph)

session = push_session(document = curdoc())
session.show(layout)
session.loop_until_closed()

关于python - Bokeh :使用复选框小部件隐藏和显示图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44374307/

相关文章:

python - 计算重复列表的频率 - 在列表列表中

java - JAVA和PYTHON中的SHA256加密产生不同的结果

ios - Flutter-CupertinoDatePicker initialDateTime仅更新一次

css - Wordpress:标题中的小部件在移动设备中流向 Logo

javascript - BokehJS 标题文本对齐

python - 在 Bokeh 中使用 TapTool 设置图形范围

python - 带有 Bokeh 图的 ImportError : No module named _ctypes. Google 应用引擎

python - 用 python 编写脚本语言

javascript - 获取库中的文件(汇总)

python - Python 中最快的 2D 卷积或图像过滤器