gpt4 book ai didi

python - 在笔记本中获取Bokeh的选择

转载 作者:行者123 更新时间:2023-12-03 16:21:37 26 4
gpt4 key购买 nike

我想在绘图上选择一些点(例如,从box_selectlasso_select),然后在Jupyter笔记本中检索它们以进行进一步的数据探索。我怎样才能做到这一点?

例如,在下面的代码中,如何将所选内容从Bokeh导出到笔记本?如果我需要Bokeh服务器,这也很好(我在docs中看到我可以与服务器添加“双向通信”,但没有设法使示例适应我的目标)。

from random import random
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
from bokeh.models.sources import ColumnDataSource

output_notebook()

x = [random() for x in range(1000)]
y = [random() for y in range(1000)]

s = ColumnDataSource(data=dict(x=x, y=y))
fig = figure(tools=['box_select', 'lasso_select', 'reset'])
fig.circle("x", "y", source=s, alpha=0.6)

show(fig)
# Select on the plot
# Get selection in a ColumnDataSource, or index list, or pandas object, or etc.?

笔记
  • 我在SO上看到一些相关的问题,但是大多数答案是针对Bohek的过时版本,0.x或1.x的,我正在寻找v> = 2的答案。
  • 我愿意接受其他可视化库(例如altair等)的解决方案。
  • 最佳答案

    如果您正在运行bokeh服务器,则可以通过datasource.selection.indices访问数据源的选择索引。以下是如何执行此操作的示例(从官方Embed a Bokeh Server Into Jupyter示例进行了修改):

    from bokeh.models import ColumnDataSource
    from bokeh.plotting import figure
    from bokeh.io import show, output_notebook

    from bokeh.sampledata.sea_surface_temperature import sea_surface_temperature

    output_notebook()

    df = sea_surface_temperature.copy()[:100]
    source = ColumnDataSource(data=df)

    def bkapp(doc):

    plot = figure(x_axis_type='datetime', y_range=(0, 25), tools="lasso_select",
    y_axis_label='Temperature (Celsius)',
    title="Sea Surface Temperature at 43.18, -70.43")
    plot.circle('time', 'temperature', source=source)

    doc.add_root( plot)

    show(bkapp)

    选择某些内容后,可以按以下方式获取所选数据:
    selected_data = df.iloc[source.selected.indices]
    print(selected_data)

    哪个应该显示您选择的值。

    尽管超出此问题的范围,但请注意,jupyter笔记本电脑与bokeh应用程序的交互性质之间存在脱节:此解决方案引入了jupyter笔记本电脑无法保存的状态,因此重新启动它并执行所有单元并不会得到相同的结果结果。解决此问题的一种方法是用泡菜坚持选择:
    df = sea_surface_temperature.copy()[:100]
    source = ColumnDataSource(data=df)
    if os.path.isfile("selection.pickle"):
    with open("selection.pickle", mode="rb") as f:
    source.selected.indices = pickle.load(f)

    ... # interactive part

    with open("selection.pickle", mode="wb") as f:
    pickle.dump(source.selected.indices, f)

    关于python - 在笔记本中获取Bokeh的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61340741/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com