Python 如何创建具有多个独立DynamicMap绘图的Holoviews应用程序?
我正在尝试使用HoloView创建DynamicMap类型的绘图的网格布局(比如2x2)。 这将作为Holoviews/Bokeh应用程序使用 创建DMAP后,我使用Python 如何创建具有多个独立DynamicMap绘图的Holoviews应用程序?,python,matplotlib,plot,bokeh,holoviews,Python,Matplotlib,Plot,Bokeh,Holoviews,我正在尝试使用HoloView创建DynamicMap类型的绘图的网格布局(比如2x2)。 这将作为Holoviews/Bokeh应用程序使用 创建DMAP后,我使用 layout = hv.Layout([dmap1, dmap2]).cols(2) 此布局将生成两个并排的绘图 我面临的问题是,默认情况下,每个动态地图的小部件聚集在行的右侧,与绘图没有视觉关联(地图工具栏也被合并成一个) 此外,如果我将两个以上的DMAP传递给布局,我会得到一个错误: TypeError: DynamicMa
layout = hv.Layout([dmap1, dmap2]).cols(2)
此布局将生成两个并排的绘图
我面临的问题是,默认情况下,每个动态地图的小部件聚集在行的右侧,与绘图没有视觉关联(地图工具栏也被合并成一个)
此外,如果我将两个以上的DMAP传递给布局,我会得到一个错误:
TypeError: DynamicMap does not accept AdjointLayout type, data elements have to be a ('ViewableElement', 'NdMapping', 'Layout').
我正在服务器模式下使用渲染器:
renderer = hv.renderer('bokeh')
renderer = renderer.instance(mode='server')
总之,我想要一个由2个以上独立的、可控制的动态图组成的网格。这里有很多东西需要解开,所以让我开始回答这个问题: 每个动态映射的小部件聚集在行的右侧 如果您想要独立的小部件集,那么您必须手动构建每一组小部件,并自己构建生成的bokeh模型。此示例演示了此方法:
将numpy导入为np
将全息视图导入为hv
从bokeh.io导入curdoc
从bokeh.layouts导入行
renderer=hv.renderer('bokeh')。实例(mode='server')
dmap1=hv.DynamicMap(λx:hv.Curve(np.random.rand(10)),kdims='x').redim.range(x=(0,5))
dmap2=hv.DynamicMap(λy:hv.Scatter(np.random.rand(10)),kdims='y').redim.range(x=(0,5))
widget1=renderer.get_小部件(dmap1,None,position='over')。状态
widget2=renderer.get_小部件(dmap2,None,position='over')。状态
r=行(widget1,widget2)
doc=curdoc()
添加文档根(r)
我们创建两个独立的DynamicMap,然后使用渲染器生成单独的绘图和小部件,然后使用bokeh行布局组合它们。正如您所看到的,我们还可以为小部件定义一个位置,这样它们就可以放在顶部,而不是放在右边
“地图”工具栏也可以合并为一个
在一个新的merge\u中,添加了工具
选项,允许在单个布局中使用单独的工具栏
此外,如果我将两个以上的DMAP传递给布局,我会得到一个错误:
TypeError: DynamicMap does not accept AdjointLayout type, data elements have to be a ('ViewableElement', 'NdMapping', 'Layout').
这可能是由于返回了邻接对象,这在DynamicMap中是不允许的。您是否碰巧使用了
.hist
方法?如果是这样,请尝试在DynamicMap
上调用它,而不是让DynamicMap
返回一个带有相邻直方图的对象
,谢谢@philippjfr给出的好答案。但是如果有多行呢?继续添加根?我在尝试创建小部件时遇到此错误:rmeans\u w=renderer.get\u小部件(rmeans,None,position='over')。state AttributeError:'BokehSelectionWidget'对象没有属性'state',更复杂的布局如何?您是否只将窗口小部件传递到行?而不是情节?Bokeh有一个布局函数,它似乎不接受hv dmaps:ValueError:只有LayoutDOM项可以插入到布局中。尝试插入::DynamicMap[Exchanges,Symbols,Window],类型>在尝试创建小部件时,我遇到此错误。是否确实使用:renderer=hv.renderer('bokeh')在“服务器”模式下创建了渲染器实例。instance(mode='server')>是否仅向行传递小部件?BokehServerWidget上的这些.state
包含绘图和小部件的bokeh布局。如果您只需要打印,可以使用渲染器.get_plot(dmap).state
。是的,我正在服务器模式下使用渲染器:renderer=hv.renderer('bokeh')renderer=renderer.instance(mode='server'))