¿Bokeh Callback actualizó una lista en lugar de una ColumnDataSource?

Mi pregunta tiene que ver con modificaresta ejemplo de la Galería Bokeh.

Tengo una matriz m o datos sin procesar, en los que cada fila corresponde a un par de coordenadas x, y en un espacio transformado (consulte la parte #MockData del código).

Las coordenadas x, y se trazan en el diagrama de la izquierda. Estoy tratando de cambiar el ejemplo para que, cuando seleccione algunos puntos en la figura izquierda, la figura derecha muestre gráficos de líneas de las filas correspondientes.

He reducido el problema hasta el punto, donde la figura correcta mostrará los datos deseados como se especifica en la lista de "índices". Sin embargo, no puedo entender cómo vincular la función de devolución de llamada a la lista de índices. (Actualmente, la devolución de llamada actualiza inútilmente la fuente s2 con los índices).

El código debería funcionar cuando se copia:

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)

Pregunta original

Trabajando con el ejemplo en la documentación de Bokeh. Estoy tratando de obtener índices de la selección en la ventana izquierda y usarlos para obtener la fila apropiada de una matriz con datos originales y trazar la fila. En detalle:

Comienzo con una matriz de valores, donde cada columna es un año y cada fila una ubicación. Ejecuto una incrustación espectral sklearn en la matriz para caracterizar los datos y obtener una matriz, donde cada columna de alguna manera describe los datos. Trazo las primeras 3 columnas como coordenadas x, y y un color. A continuación, intento modificar el ejemplo de modo que, cuando selecciono algunos puntos, el segundo gráfico muestre sus datos originales (filas) como líneas separadas. El código relevante tomado principalmente del ejemplo está debajo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta