在Web App中设置Bokeh图表的绝对屏幕位置

问题描述 投票:2回答:1

我试图在布局中设置散景图的绝对位置,以便其中一个图显示在另一个图的顶部。现在我正在密谋这样的事情:

from bokeh.io import curdoc 
from bokeh.plotting import figure 
from bokeh.layouts import layout 
import numpy as np

x = np.arange(1,10.1,0.1) 
y = [i**2 for i in x]

categories = ['A', 'B'] 
values = [1000, 1500]

fig1 = figure(width=600,plot_height=600, title="First Plot")
fig1.line(x=x, y=y)

fig2 = figure(width=200,plot_height=250,x_range=categories,
title="Second Plot") fig2.vbar(x=categories, top=values, width=0.2)

l = layout([[fig1,fig2]]) 
curdoc().add_root(l)

结果将是这样的:

Bokeh Layout with Line an Bar Cart next to each other

我正在寻找的是一些使它看起来像这样的方法:

Bokeh Layout with Bar Chart inside Line Chart

如何实现这一结果?

谢谢!

python web-applications bokeh
1个回答
1
投票

这就是我提出的(适用于Bokeh v1.0.4)。您需要将鼠标移动到绘图上以使另一个跳转到内部,但您也可以从回调中复制JS代码并手动将其添加到Bokeh生成的HTML中,以便获得相同的结果。

from bokeh.plotting import figure, show
from bokeh.layouts import Row
from bokeh.models import ColumnDataSource, CDSView, BooleanFilter, CustomJS, BoxSelectTool, HoverTool
import pandas as pd

plot = figure(tools = 'hover', tooltips = [("x", "@x"), ("y", "@y")])
circles = plot.circle('x', 'y', size = 20, source = ColumnDataSource({'x': [1, 2, 3], 'y':[1, 2, 3]}))

inner_plot = figure(name = 'inner_plot', plot_width = 200, plot_height = 200)
lines = inner_plot.line('x', 'y', source = ColumnDataSource({'x': [8, 9, 10], 'y':[8, 6, 8]}))

code = """  div = document.getElementsByClassName('bk-root')[0];            
            tooltip_plot = div.children[0].children[1]
            tooltip_plot.style = "position:absolute; left: 340px; top: 350px;"; """

callback = CustomJS(code = code)
plot.js_on_event('mousemove', callback)

show(Row(plot, inner_plot))

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.