bokeh - Bokeh + Holoviews 绘图的 M*N 布局
问题描述
我有 N 个图,我想以 M*N 布局显示图,其中 M=1,2,3,.....
import holoviews as hv
from bokeh.layouts import layout as bk_lyout
from bokeh.layouts import row, column
from bokeh.models import (HoverTool, Panel, CustomJS)
from bokeh.models.widgets import (Tabs, Select, Button)
from bokeh.models.widgets.inputs import AutocompleteInput
from dask import dataframe as dd
from bokeh.core.enums import SizingMode
from holoviews.operation.datashader import datashade
def get_vmap(x, y, label=''):
if x not in cols or y not in cols:
return None
hover = HoverTool(tooltips=[('x-value', '@' + x + '{%F %H:%M:%Ss %6Nms}'),
('y-value', '$y')],
formatters={'@timestamp': 'datetime'})
curve_generated = curve(x, y, label=label)
vmap = datashade(curve_generated, normalization='linear').opts(width=400, height=400)
range_stream = hv.streams.RangeX(source=curve_generated)
filtered_zoom = curve_generated.apply(xrange_filter, streams=[range_stream])
hover_enabled = filtered_zoom.opts(tools=[hover])
# hover_enabled = hv.util.Dynamic(aggregate(curve_generated, width=50, height=50), operation=hv.QuadMesh).opts(tools=[hover], alpha=0, hover_alpha=0.1)
return vmap * hover_enabled
plot_layout = column(children=[])
def modify_doc(doc):
plots = []
for key, value in PLOT_INFO.items():
overlay_plots = []
for carrier in range(7):
car_value = value.format(carrier)
plot_label = "{}-Carrier_{}".format(key.split("_vs_")[1], carrier)
carrier_plot = get_vmap('timestamp', car_value, label=plot_label)
if carrier_plot is not None:
print('\n Found plot for Carrier {}, {}'.format(carrier, carrier_plot))
overlay_plots.append(carrier_plot)
overlaid_plot = None
for plot in overlay_plots:
overlaid_plot = overlaid_plot * plot if overlaid_plot is not None else plot
#overlaid_plot = hv.Overlay(overlay_plots).collate()
if overlaid_plot is not None:
try:
hv_overlay_plot = renderer.get_plot(overlaid_plot, doc)
hv_overlay_plot = bk_lyout([[hv_overlay_plot.state]], sizing_mode='fixed')
select.js_link('value', hv_overlay_plot, 'sizing_mode')
plots.append(hv_overlay_plot)
plot_layout.children.append(hv_overlay_plot)
except Exception as e:
print(e)
tab = Panel(child=plot_layout, title='Interactive Dashboard')
这里plot_layout.children
有地块列表,我想在 M*N 中显示它们。例如 10 个地块,每行 2 个,用户应该可以选择修改它,比如选择 5 个地块,然后选择 2 行。
解决方案
推荐阅读
- asp.net-mvc - 使用会话未过期,并且用户在空闲时间后未重定向到登录页面(MVC)
- excel - 如果日期校正VBA的条件
- css - Angular 8:将 Mat-form-field 中的高度更改为特定像素数
- php - ACF 中继器字段 [短代码] - 如果子字段为空,则不显示任何内容
- node.js - 如何使用graphql将动态数量的变量保存到数据库中?
- php - Laravel 数据库通知 - 按帖子 ID 和类型分组
- amazon-web-services - AWS ec2 根驱动器的备份
- reactjs - 如何在 react-static 构建的应用程序中从 static.config.js 文件中定义的路由呈现菜单?
- django - 无法解析“函数”对象没有属性“_default_manager”
- java - 为什么这段代码不起作用?我需要1-9的随机数