CDSView Bokeh искажает цвета при выборе маркеров на графике - PullRequest
0 голосов
/ 06 февраля 2020

Я создал linear_cmap на основе значений в моем ColumnDataSource, который должен раскрасить маркеры на моей фигуре Bokeh. Это все работает как шарм.

Однако теперь я хочу отфильтровать данные в ColumnDataSource, для которого я использую CDSView Боке вместе с IndexFilter. Если на рисунке ничего не выбрано, все в порядке - отфильтрованные маркеры отображаются соответствующим цветом. Но когда я выбираю точку, то все маркеры вдруг окрашиваются по-разному. Эта проблема не возникает, когда не используется представление.

Что я делаю не так?

Вот минимальный рабочий пример, чтобы продемонстрировать, что я имею в виду:

from bokeh.palettes import Spectral10
from bokeh.transform import linear_cmap
from bokeh.io import show
from bokeh.models import ColumnDataSource, IndexFilter, CDSView, Circle, TapTool
import bokeh.plotting as bkpl


# some easy data
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = x
v = x

# create CDS and view
s                       = ColumnDataSource(data = {"x": x, "y": y, "v": v})
view                    = CDSView(source = s, filters = [IndexFilter([1, 2, 3, 4, 5, 7, 8])])

# create color map 
cmap                    = linear_cmap("v", palette = Spectral10, low = 0, high = 10, nan_color = "white")

# everything plotting-related
tt                      = TapTool(behavior = "select")
tooltip                 = [("", "@v")]

fig                     = bkpl.figure(tools=[tt], tooltips = tooltip)
c                       = fig.circle(x = "x", y = "y", source = s, fill_color = cmap, line_color = cmap, size = 20, view = view)
c.selection_glyph       = Circle(fill_color = cmap, fill_alpha = 1)
c.nonselection_glyph    = Circle(fill_color = cmap, fill_alpha = 0.5, line_color = cmap) 

# show plot
show(fig)

Наконец, вот иллюстрация проблемы:

enter image description here

...