Я анализирую большое количество данных (из моделирования MonteCarlo). Мне нужно отобразить всю траекторию множества частиц. Я хочу использовать ползунок диапазона, чтобы выбрать временной диапазон в симуляции, потому что скоро у меня будет много частиц (около 370 КБ)
. Я могу легко отобразить их на фигуре Боке, используя:
output_file(filename)
groups = df.groupby('part_num')
mxTime = np.ceil(df['time'].max().compute() * 10.0) / 10.0
mnTime = np.floor(df['time'].min().compute() * 10.0) / 10.0
names = list(df['part_num'].unique())
x = [list(groups.get_group(sdf)['x']) for sdf in names]
y = [list(groups.get_group(sdf)['y']) for sdf in names]
z = [list(groups.get_group(sdf)['z']) for sdf in names]
t = [list(groups.get_group(sdf)['time']) for sdf in names]
source = ColumnDataSource(dict( x = x,
y = y, z = z, t = t,
color = inferno(len(x))))
plot_xy = bp.figure(match_aspect = True, output_backend = "webgl",
x_axis_label= 'X [m]', y_axis_label= 'Y [m]', plot_width = 300,
plot_height = 300)
bp.save(plot_xy)
Проблема возникает, когда мне приходится писать код CustomJSFilter. Я попробовал упрощенный подход, который не работает:
range_slider = RangeSlider(start = mnTime, end = mxTime,
value=(mnTime, mnTime + np.max([0.1 * (mxTime - mnTime), 0.1])),
step=.1, title="Time range")
callback = CustomJS(args = dict(source = source), code="""
source.change.emit();
""")
range_slider.js_on_change('value', callback)'''
js_filter = CustomJSFilter(args = dict(slider = range_slider, source = source), code="""
var indices = [];
for (var i = 0; i <= source.data['t'].length; i++) {
if ((source.data['t'][i] > slider.value[0]) & (source.data['t'][i] < slider.value[1])) {
indices.push(i)
}
}
return indices;
""")
view = CDSView(source= source, filters = [js_filter])
Я хотел бы перебрать различные группы в моем ColumnDataSource, чтобы выбрать только временной диапазон, заданный RangeSlider.
Редактировать: После комментария bigreddot, здесь есть более подробная информация о моей проблеме. Когда я использую этот кусок кода, на экране ничего не появляется. Я использовал его с кадром данных, у которого нет группы, и это сработало. Я согласен, что было бы лучше использовать и indexfilter, но в обоих случаях (моя первая попытка или indexfilter) я не знаю, как выбрать действительные индексы, если набор данных был «сгруппирован».
Спасибо за любую помощь, вы можете предоставить:)