gpt4 book ai didi

python - 如何创建具有多个独立 DynamicMap 绘图的 Holoviews 应用程序?

转载 作者:行者123 更新时间:2023-12-01 02:12:46 25 4
gpt4 key购买 nike

我正在尝试使用 Holoviews 创建 DynamicMap 类型图的网格布局(例如 2x2)。这将作为 Holoviews/Bokeh 应用程序提供。

创建我的 dmaps 后,我使用它们来放置它们

layout = hv.Layout([dmap1, dmap2]).cols(2)

此布局生成两个并排的图我面临的问题是,默认情况下,每个动态 map 的小部件都聚集在行的右侧,与图没有视觉关联( map 工具栏也合并为一个)。

此外,如果我将两个以上的 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 个以上独立可控动态图组成的网格。

最佳答案

这里有很多东西需要解开,所以让我开始回答这个问题:

the widgets for each Dynamic Map get clustered to the right of the row

如果您想要独立的小部件集,您将必须手动构建每组小部件并自行组合生成的 Bokeh 模型。此示例演示了这种方法:

import numpy as np
import holoviews as hv

from bokeh.io import curdoc
from bokeh.layouts import row

renderer = hv.renderer('bokeh').instance(mode='server')

dmap1 = hv.DynamicMap(lambda x: hv.Curve(np.random.rand(10)), kdims='x').redim.range(x=(0,5))
dmap2 = hv.DynamicMap(lambda y: hv.Scatter(np.random.rand(10)), kdims='y').redim.range(x=(0,5))

widget1 = renderer.get_widget(dmap1, None, position='above').state
widget2 = renderer.get_widget(dmap2, None, position='above').state

r = row(widget1, widget2)

doc = curdoc()
doc.add_root(r)

我们创建两个独立的 DynamicMap,然后使用渲染器生成单独的绘图和小部件,然后使用 Bokeh 行布局组合它们。正如您所看到的,我们还可以为小部件定义一个位置,这样它们就不会放在右侧,而是放在顶部。

the maps toolbars also get combined into just one

this recent PR添加了新的 merge_tools 选项,以允许在单个布局中拥有单独的工具栏。

Moreover, If I pass more than two dmaps to the layout, I get an error:

这可能是由于返回了一个相邻的对象,目前在 DynamicMap 中不允许这样做。您是否有机会使用 .hist 方法?如果是这样,请尝试在 DynamicMap 上调用它,而不是让 DynamicMap 返回带有相邻直方图 的对象。

关于python - 如何创建具有多个独立 DynamicMap 绘图的 Holoviews 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610996/

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