Как очистить выделение из сюжета Bokeh? - PullRequest
0 голосов
/ 12 июня 2018

Я использую выделение на рисунке, чтобы управлять моим серверным приложением Bokeh.Однако после того, как пользователь выбирает что-то, я не хочу, чтобы этот выбор оказывал какое-либо визуальное влияние на фигуру.Как я могу удалить эффекты выделения?

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

  1. Удалить выделение в обратном вызове

    def cb(attr, old, new):
        source.selected.indices.clear()
        ...
    
    source.on_change('selected', cb)
    
  2. Сохраните выбранные индексы, но удалите разницу в стилях между ними

    Я обнаружил http://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#selected-and-unselected-glyphs, но не знал, как эффективно применятьэто к моей проблеме.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Глифы выбора / невыделения можно либо отключить, либо использовать основной глиф, например:

r = plot.scatter(...)
r.selection_glyph = None
r.nonselection_glyph = None

или

r = plot.scatter(...)
r.selection_glyph = r.glyph
r.nonselection_glyph = r.glyph
0 голосов
/ 12 июня 2018

Вариант 1

Я уже написал GH проблему , чтобы устранить ошибку.Мы должны иметь возможность обновлять выбранные образцы программно.

Вариант 2

Если вы хотите скрыть только индексы выбора, вы можете делать то, что говорит Матеуш.

Обычно у вас будет только глиф с выбранными и невыбранными элементамикак это:

c = self.plot.scatter(
    x='x',
    y='x',
    size=4,
    line_color=None,
    fill_color='blue',
    source=source,
    view=view,

    nonselection_line_color=None,
    nonselection_fill_color='blue',
    nonselection_fill_alpha=1.0,
)
c.selection_glyph = Circle(
    line_color=None,
    line_alpha=1.0,
    fill_color='red',
)

Но, если вы хотите изменить выделение и сохранить цвет выделенных элементов в настраиваемом выделении, в качестве обходного пути вы можете управлять другим списком custom_selection с фактически выбранными выборками.,Таким образом, вам нужно будет создать два глифа, один для выбранного и другой с невыбранными образцами.Примерно так:

c = self.plot.scatter(
    x='x',
    y='x',
    size=4,
    line_color=None,
    fill_color='blue',
    source=source,
    view=view_non_selected,          # here the view should have the non-selected samples

    nonselection_line_color=None,
    nonselection_fill_color='blue',
    nonselection_fill_alpha=1.0,
)
c.selection_glyph = Circle(
    line_color=None,
    line_alpha=1.0,
    fill_color='blue',  # I plot the selected point with blue color here as well
)

c_sel = self.plot.scatter(
    x='x',
    y='x',
    size=4,
    line_color=None,
    fill_color='red',
    source=source,
    view=view_selected,          # here the view should have the selected samples

    nonselection_line_color=None,
    nonselection_fill_color='red',
    nonselection_fill_alpha=1.0,
)
c_sel.selection_glyph = Circle(
    line_color=None,
    line_alpha=1.0,
    fill_color='red',  # I plot the selected point with blue color here as well
)

Каждый раз, когда вы хотите обновить выборки, вам придется обновлять список индексов представлений:

view_non_selected.filters = [IndexFilter(non_selected_indices_list)]
view_selected.filters = [IndexFilter(custom_selection)]

Вы можете создать один одиночный глиф с цветным столбцом в видену и обнови источник.Это может быть более эффективным.

Но на вашем месте я бы дождался исправления ошибки.

...