Python 如何通过更改Bokeh图形中的选择来替换面板的一部分?
通常,我可以通过Python 如何通过更改Bokeh图形中的选择来替换面板的一部分?,python,bokeh,holoviz,pyviz,panel-pyviz,Python,Bokeh,Holoviz,Pyviz,Panel Pyviz,通常,我可以通过pop和insert替换面板的部件,这会自动更新任何现有面板。但是,如果这些是从所选的bokeh上触发的。在_change回调上, 现有面板不会更新 例如,在JupyterLab中运行以下命令是可行的 来自bokeh.plotting导入图的 来自bokeh.sampledata.iris导入花 从bokeh.models导入ColumnDataSource 作为pn导入面板 请注意:扩展部分() def create_figure(): src=ColumnDataSource
pop
和insert
替换面板的部件,这会自动更新任何现有面板。但是,如果这些是从所选的bokeh上触发的。在_change
回调上,
现有面板不会更新
例如,在JupyterLab中运行以下命令是可行的
来自bokeh.plotting导入图的
来自bokeh.sampledata.iris导入花
从bokeh.models导入ColumnDataSource
作为pn导入面板
请注意:扩展部分()
def create_figure():
src=ColumnDataSource(花卉)
p=图形(高度=200,宽度=200,工具=box\u选择)
p、 圆(“花瓣长度”、“花瓣宽度”,源=src)
返回p
pnl=零件面板(零件行(创建零件图,创建零件图))
pnl
在下一个单元格中运行以下操作时,显示的面板将按预期更新:
pnl.pop(0)
pnl.插入(0,图)
但是,如果在列数据源的选择更改时通过回调执行相同的操作,则面板不会在我在绘图中选择数据点时更新:
def replace_图(属性、旧、新):
pnl.objects.pop(0)
pnl.objects.insert(0,图)
def create_figure():
src=ColumnDataSource(花卉)
p=图形(高度=200,宽度=200,工具=box\u选择)
p、 圆(“花瓣长度”、“花瓣宽度”,源=src)
src.selected.on_change('index',replace_plot)
返回p
pnl=零件面板(零件行(创建零件图,创建零件图))
pnl
工作原理是用新列表替换整个pnl.objects
:
def replace_图(属性、旧、新):
pnl.objects=[图]
奇怪的是,只有当我调用pnl.show()
以在新的浏览器选项卡中显示面板时,这才起作用。在笔记本中,我需要在新单元格中再次显示面板以查看更新。我尝试通过索引替换对象
列表中的单个项目,但其效果与弹出
和插入
相同,面板没有自动更新
是否有办法更换所选面板vi的部件。在_change回调时自动刷新(最好在笔记本内,但通过show
也可以)
版本:
-----
bokeh 2.0.1
pandas 1.0.3
panel 0.9.5
-----
IPython 6.5.0
jupyter_client 5.2.3
jupyter_core 4.6.3
jupyterlab 2.1.0
notebook 5.6.0
-----
Python 3.7.6 | packaged by conda-forge | (default, Mar 23 2020, 23:03:20) [GCC 7.3.0]
Linux-5.6.13-arch1-1-x86_64-with-arch
4 logical CPU cores
-----
Session information updated at 2020-05-21 18:38
原来这是面板中的一个bug,现在正在跟踪。目前,以下代码片段可以解决这个问题:
从panel.io.notebook导入推送
def替换图(属性、旧、新):
对于pnl.\U型号中的ref:
_,u,doc,comm=pn.state._视图[ref]
霍尔德博士
pnl[0]=1
推送(文档、通信)
对于pnl.\U型号中的ref:
_,u,doc,comm=pn.state._视图[ref]
文件编号()
我不知道答案,但是如果你没有得到这个问题的答案,那么你也可以尝试将你的问题发布到Thank@Sandervandeoord上,我之前在网站上打开过一个。