Я заблудился относительно того, как настроить источник данных столбца, чтобы я мог выбирать точки на одном графике и выделять соответствующие точки на другом графике. Я пытаюсь узнать больше о том, как это работает.
Пример кода, который я использую, является примером, называемым Linked Brushing . Я хотел бы посмотреть, смогу ли я получить тот же эффект с моим собственным кодом, ниже. Это объяснение на веб-странице также относится к связанному выделению с отфильтрованными данными , но я не понимаю, что делает код filters=[BooleanFilter([True if y > 250 or y < 100 else False for y in y1]
на этой странице, поэтому я не уверен, как его адаптировать или даже отношение.
Вот мой код:
from bokeh.plotting import figure, output_file, show, Column
from bokeh.models import ColumnDataSource, CDSView, BooleanFilter
from MyFiles import *
class bokehPlot:
def __init__(self, filename, t, a, b, c, d):
self.source = ColumnDataSource(data=dict(x=t, y1=a, y2=b, y3=c, y4=d))
p1 = self.makePlot(filename, 'x', 'y1', 'A')
p2 = self.makePlot(filename, 'x', 'y2', 'B', x_link=p1)
p3 = self.makePlot(filename, 'x', 'y3', 'C', x_link=p1)
p4 = self.makePlot(filename, 'x', 'y4', 'D', x_link=p1)
output_file('scatter_plotting.html', mode='cdn')
p = Column(p1, p2, p3, p4)
show(p)
def makePlot(self,filename,x0,y0,y_label, **optional):
TOOLS = "box_zoom,box_select,reset"
p = figure(tools=TOOLS, plot_width=1800, plot_height=300)
if ('x_link' in optional):
p0 = optional['x_link']
p.x_range = p0.x_range
p.scatter(x=x0, y=y0, marker='square', size=1, fill_color='red', source=self.source)
p.title.text = filename
p.title.text_color = 'orange'
p.xaxis.axis_label = 'T'
p.yaxis.axis_label = y_label
p.xaxis.minor_tick_line_color = 'red'
p.yaxis.minor_tick_line_color = None
return p
И мой основной выглядит так (настроен на передачу до 100 тысяч точек данных из файла): web
p = readMyFile(path+filename+extension, 100000)
t = p.time()
a = p.a()
b = p.b()
c = p.c()
d = p.d()
v = bokehPlot(filename, t, a, b, c, d)
Переменные t, a, b, c и d имеют тип numpy ndarray.
Мне удалось связать графики, чтобы я мог панорамировать и масштабировать их все из одного графика. Я хотел бы получить кластер данных из одного графика и увидеть их выделенными, а также соответствующие значения (при тех же значениях t), выделенные на других графиках.
В этом коде я могу нарисовать поле выбора, но оно просто на мгновение остается, затем исчезает, и я не вижу никакого эффекта на любом графике. Как box_select связан с источником и что вызывает перерисовку графиков?
Это всего лишь один шаг в попытке познакомиться с Боке. Моей следующей целью будет использование TSNE для кластеризации моих данных и отображения кластеров с синхронизированными цветами на каждом графике. Но сначала я хочу понять механизм использования данных столбца, установленных здесь. Например, в примере кода я не вижу явной связи между операцией box_select и исходной переменной и тем, что вызывает перерисовку графика.