Bokeh Callback обновляет список вместо ColumnDataSource?

Мой вопрос касается модификацииэтот пример из галереи Боке.

У меня есть матрица m или необработанные данные, в которых каждая строка соответствует паре координат x, y в преобразованном пространстве (см. Часть кода #MockData).

Координаты x, y приведены на левом графике. Я пытаюсь изменить пример так, чтобы при выборе некоторых точек на левом рисунке на правом рисунке отображались линейные графики соответствующих строк.

Я сузил проблему до точки, где на правильной фигуре будут показаны нужные данные, как указано в списке «индексы». Однако я не могу понять, как связать функцию обратного вызова со списком индексов. (В настоящее время Callback бесполезно обновляет источник s2 индексами.)

Код должен работать при копировании:

from bokeh.plotting import figure, output_file, show, ColumnDataSource, hplot
from bokeh.models import HoverTool, Callback, ColumnDataSource
import pandas as pd
output_file("Map.html")

# Mock data
m = np.zeros((6,11))
for i in range(6):
    for j in range(11):
        m[i,j] = i+j
x = [0,1,2,3,4,5]; y = [0,2,4,6,8,10]
m0 = m.transpose()
m1 = pd.DataFrame(m0, index=['0','1','2','3','4','5','6','7','8','9','10'], columns=[np.arange(0,len(m),1).astype(str)])

#First plot
s1 = ColumnDataSource(data=dict(x=x,y=y))
p1 = figure(tools=["lasso_select"], plot_width=600, plot_height=400)
p1.scatter('x', 'y', fill_color='black', line_color=None, size=10, source=s1)

#Second plot
s2 = ColumnDataSource(data=dict(z=[]))
p2 = figure(plot_width=400, plot_height=400)    
m1 = ColumnDataSource(m1)
indices = [1,3,4]
for i in indices:
    p2.line(np.arange(0,11,1), '%s'%i ,  source=m1)

s1.callback = Callback(args=dict(s2=s2), code="""
  var inds = cb_obj.get('selected')['1d'].indices;
  var d2 = s2.get('data');
  d2['z'] = []
  for (i = 0; i < inds.length; i++) {
      d2['z'].push(inds[i])}
  s2.trigger('change'); 
""")

layout = hplot(p1, p2)
show(layout)

Оригинальный вопрос:

Работа с примером в документации Bokeh. Я пытаюсь получить индексы из выборки в левом окне и использовать их, чтобы получить соответствующую строку из матрицы с исходными данными и построить строку. В деталях:

Я начну с матрицы значений, где каждый столбец - это год, а каждая строка - местоположение. Я запускаю sklearn Spectral Embedding на матрице, чтобы охарактеризовать данные и получить матрицу, где каждый столбец как-то описывает данные. Я строю первые 3 столбца в виде координат x, y и цвета. Далее я пытаюсь изменить пример так, чтобы при выборе некоторых точек на втором графике их исходные данные (строки) отображались в виде отдельных линий. Соответствующий код в основном взят из примера ниже.

Ответы на вопрос(2)

Ваш ответ на вопрос