Как работает этот источник данных колонок Bokeh? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь лучше понять источник данных столбца в Bokeh (для Python).Я нашел этот код , но я не могу найти документацию, объясняющую некоторые вещи, которые я ищу, например:

  1. Где находится обратный вызов из инструмента lasso_select?Я хочу посмотреть, где описана ожидаемая функциональность.
  2. Как описывается функциональность lasso_select в коде?(Что если я захочу это изменить?)
  3. Что происходит с источником данных столбца, так что круги за пределами области лассо-выбора меняют внешний вид?(Я хочу знать, как я могу использовать источник данных столбца для более сложной визуализации, чем показано в этой демонстрации. Поэтому я хотел бы знать, каким полем словаря манипулируют и как им манипулируют. Например, есть лискрытое «цветное» поле или что-то в этом роде, которое не указано в этом коде?)
  4. Какой код вызывает перерисовку рисунка при выполнении действия lasso_select?

У меня есть еще много вопросов, связанных с этим и CDSView, но я пока остановлюсь здесь.

from bokeh.io import output_file, show
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure

output_file("brushing.html")

x = list(range(-20, 21))
y0 = [abs(xx) for xx in x]
y1 = [xx**2 for xx in x]

# create a column data source for the plots to share
source = ColumnDataSource(data=dict(x=x, y0=y0, y1=y1))

TOOLS = "box_select,lasso_select,help"

# create a new plot and add a renderer
left = figure(tools=TOOLS, plot_width=300, plot_height=300, title=None)
left.circle('x', 'y0', source=source)

# create another new plot and add a renderer
right = figure(tools=TOOLS, plot_width=300, plot_height=300, title=None)
right.circle('x', 'y1', source=source)

p = gridplot([[left, right]])

show(p)

Это связано с моим предыдущим вопросом , где единственным ответом былочень узкий в объяснении этого конкретного вопроса.Тем не менее, мне действительно интересно, что происходит под капотом, чтобы дать результаты, которые видны.Это помогло бы моему пониманию намного больше, если бы я мог знать некоторые из этих деталей.

1 Ответ

0 голосов
/ 04 декабря 2018

1) Обратного звонка нет.Инструмент отвечает за определение геометрии выделения, а затем тестирование попаданий на основе этой геометрии.Результаты теста на попадание сохраняются в свойстве selection источника данных.Средства визуализации глифов рисуют глифы на основе свойства selection их источника данных.Если два средства визуализации глифов (даже на разных графиках) совместно используют один и тот же источник данных, они оба будут рисовать один и тот же набор выбранных / невыбранных в результате.

2) Если вы имеете в виду внешний вид обычного или выбранного объекта, а не выбранного объекта, как настроить его, как описано в документации здесь:

https://bokeh.pydata.org/en/1.0.2/docs/user_guide/styling.html#selected-and-unselected-glyphs

Существует также несколько свойств самого объекта LassoTool, которые контролируют, например, следует ли делать выбор при каждом перемещении мыши или только при перемещении мыши, и как выглядит наложение выделения.Все они записаны в ReferenceGuide.Если вы спрашиваете, как изменить реализацию, как в msot все в Bokeh, настоящая работа не выполняется в Python, она выполняется в библиотеке JavaScript BokehJS.Реализация LassoTool здесь:

https://github.com/bokeh/bokeh/blob/master/bokehjs/src/lib/models/tools/gestures/lasso_select_tool.ts

Если вы хотите чего-то принципиально другого, вам нужно реализовать собственную модель, включая ее компонент JavaScript.Существует целый раздел Руководства пользователя по созданию пользовательских расширений:

https://bokeh.pydata.org/en/1.0.2/docs/user_guide/extensions.html

3) На графике настроены различные средства визуализации, одним из которых может быть GlyphRenderer.Сам GlyphRenderer ничего не рисует, но он настраивает различные субглифы, которые используются для рисования в определенных ситуациях:

  • glyph рисует «нормальные» версии глифов (то есть, когда нет выделенияв источнике данных)
  • selected_glyph рисует «выбранные» версии глифов (т. е. те, которые внутри инструмента «Лассо» или «Ящик», когда выделение активно)
  • nonselected_glyph рисует «не-выбранные "версии глифов (то есть те, которые находятся вне инструмента лассо или бокса, когда выделение активно). По умолчанию невыделенный глиф является просто копией" обычного "глифа с альфа-значением, установленным очень низким.
  • hover_glyph рисует «скрытые» версии глифов (то есть, когда инструмент для наведения их осматривал)

Вы настраиваете внешний вид в другой ситуации, настраивая свойства для глифов, которые используются вкаждая ситуация.Для них есть разумные значения по умолчанию, но они могут быть обновлены, как описано в первой ссылке 2)

4) BokehJS имеет внутреннюю систему событий сигнала / слотов, которая используется (среди прочего) для запроса перерисовок холставсякий раз, когда различные свойства меняются.

...