создать боковые панели в боке для отображения деталей находящейся точки данных - PullRequest
0 голосов
/ 09 февраля 2019

Я видел отличные примеры того, как bokeh позволяет вам наводить курсор на точку данных и отображать всплывающие детали для нее.Бывают случаи, когда детали настолько огромны, что для отображения всего этого требуется боковая панель.Является ли bokeh достаточно полным набором инструментов для виджетов, где я могу создать боковую панель для основного дисплея и показать детали точки данных, следующей за курсором?

Может кто-нибудь указать какой-нибудь пример кода или хотя бы соответствующие API.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Если вы предпочитаете высокоуровневый API для построения и связывания графиков на основе Bokeh, вы можете использовать HoloViews;см. примеры ссылок на http://holoviews.org/reference/index.html#streams и инструкции на http://holoviews.org/user_guide/Custom_Interactivity.html.Например:

import param, numpy as np, holoviews as hv
from holoviews import opts, streams
hv.extension('bokeh')

xvals = np.linspace(0,4,202)
ys,xs = np.meshgrid(xvals, -xvals[::-1])
img = hv.Image(np.sin(((ys)**3)*xs))

pointer = streams.PointerXY(x=0,y=0, source=img)
dmap = hv.DynamicMap(lambda x, y: hv.Points([(x, y)]), streams=[pointer])
dmap = dmap.redim.range(x=(-0.5,0.5), y=(-0.5,0.5))

img + dmap.opts(size=10)

sample

0 голосов
/ 09 февраля 2019

Вы можете найти много примеров на https://bokeh.pydata.org.То, что вы хотите, возможно, добавив обратный вызов и обновив соответствующую часть.В этом примере div - это то, что вы называете боковой панелью в своем вопросе.

#for bokeh 1.0.4
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource,Div,Row
from bokeh.io import curdoc
from bokeh.events import Tap

#the data
d={'x':[1,2],'y':[3,4],'info':['some information on a first datapoint','some information on a second datapoint']}

source=ColumnDataSource(d)
tooltips = [("x", "$x"),("y", "$y"),("info","@info")]
fig=figure(tools="tap,reset",tooltips=tooltips)
c=fig.circle('x','y',source=source,size=15)

def callback(event):
    indexActive=source.selected.indices[0]
    layout.children[1]=Div(text=d['info'][indexActive])#adjust the info on the right

fig.on_event(Tap, callback)

div=Div(text=d['info'][0])

layout=Row(fig,div)
curdoc().add_root(layout)

Чтобы запустить этот код, сохраните его как code.py, откройте cmd и введите "bokeh serve code.py -показать».

...