我的散景应用程序有一个特定的设计.我正在使用bokeh 0.12.3和一个散景服务器来保持一切同步.请看看我的模型:
在左侧,有一个静态导航栏,视图的右侧部分将由手动添加的图组成.右侧的绘图列数量应改变窗口大小.我很清楚散布布局文档布局图和小部件,但它有点复杂.这是我目前的布局:
doc_layout = layout(children=[[column(radio_buttons,
cbx_buttons,
div,
data_table,
plot,
button)]],
sizing_mode='scale_width')
curdoc().add_root(doc_layout)
Run Code Online (Sandbox Code Playgroud)
为了添加我使用的新图:
doc_layout.children[-1].children.append(plot)
# appends plot to layout children [[column(..), plot]]
Run Code Online (Sandbox Code Playgroud)
但这种行为很奇怪,而且根本不是我想要达到的目标.新的图表添加在列(菜单面板)的顶部.
这里有一个简短的例子,你可以尝试看看我的意思:
from bokeh.io import curdoc
from bokeh.plotting import figure
from bokeh.models.sources import ColumnDataSource
from bokeh.models.widgets import Button, DataTable, TableColumn
from bokeh.layouts import layout, widgetbox, column, row
WIDTH = 200
HEIGHT = 200
def add_plot():
p = figure(width=WIDTH, height=HEIGHT, tools=[], toolbar_location=None)
p.line([0, 1, 2, 3, 4, 5], [0, 1, 4, 9, 16, 25]) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个带有散景(0.12.2)的交互式应用程序,它根据特定的交互更新绘图.
现在我使用滑块来改变绘图中字形的位置,但实际上我想在特定的绘图中访问鼠标的位置.
数据集是多维矩阵(张量),密集数据,每个图在特定位置显示一个维度.如果我在一个图上更改标记符号的位置,则需要更新其他图,这意味着我必须根据更新的位置切割我的数据集.
这是一个简单的例子,我尝试使用悬停工具在我的散景服务器更新功能中获取鼠标数据:
from bokeh.plotting import figure, ColumnDataSource
from bokeh.models import CustomJS, HoverTool
from bokeh.io import curdoc
s = ColumnDataSource(data=dict(x=[0, 1], y=[0, 1]))
callback = CustomJS(args=dict(s=s), code="""
var geometry = cb_data['geometry'];
var mouse_x = geometry.x;
var mouse_y = geometry.y;
var x = s.get('data')['x'];
var y = s.get('data')['y'];
x[0] = mouse_x;
y[0] = mouse_y;
s.trigger('change');
""")
hover_tool = HoverTool(callback=callback)
p = figure(x_range=(0, 1), y_range=(0, 1), tools=[hover_tool])
p.circle(x='x', y='y', source=s)
def update():
print s.data
curdoc().add_root(p)
curdoc().add_periodic_callback(update, 1000)
Run Code Online (Sandbox Code Playgroud)
不幸的是,服务器只输出:
{'y':[0,1],'x':[0,1]}
{'y':[0,1],'x':[0,1]}
{'y':[0,1],'x':[0,1]} …