2016-11-26 9 views
0

КОНТЕКСТD3.js с Лассо диаграммы рассеяния - запись выбора

Я использую d3.js & Lasso для того, чтобы позволить пользователям выбирать точки на диаграмме рассеяния. Я хочу, чтобы они могли выбирать несколько кластеров на одной диаграмме рассеяния один за другим. Я нашел пример того, как сделать это прямо здесь: http://bl.ocks.org/skokenes/511c5b658c405ad68941

ПРОБЛЕМА

Я хочу записывать каждый выбор точек, так что я в конечном итоге с массивом, где каждая точка имеет список кластеров, к которым он принадлежит. Например, Dot1 принадлежит кластерам [1,3,4].

ВОПРОС

Что бы быть лучшим способом хранения этих выборов?

ответ

1

Что было бы лучшим способом хранения этих выборов?

Ну, это слишком «мнение основано» на S.O. Тем не менее, я поделюсь очень грубым решением, в котором вместо создания для каждой точки списка кластеров, к которому он принадлежит, мы создадим список кластера с соответствующими точками. В значительной степени напротив того, что вы задали, но вы можете легко изменить полученный массив (массив с точками для каждого выбора), чтобы создать желаемую запись (один массив с выборами для каждой точки).

Первым шагом является определение массива за пределами lasso_end:

var clusters = []; 

Затем внутри lasso_end, мы получаем список выбранных точек:

var selected = lasso.items().filter(function(d){ 
    return d.selected===true 
}); 

var selectedDots = selected[0].map(d=>d.id); 

Здесь я картирование по ID. Затем мы помещаем массив в clusters:

clusters.push(selectedDots); 

Каждый раз, когда пользователь выбирает некоторые точки, cluster становится больше. Таким образом, в первый раз, вы можете получить что-то вроде этого:

var clusters = [["dot_62","dot_68","dot_87","dot_119"]]; 

И во второй раз:

var clusters = [["dot_62","dot_68","dot_87","dot_119"], 
    ["dot_53","dot_57","dot_80","dot_81","dot_93"]]; 

Вот plunker, выберите точки и проверьте консоль: https://plnkr.co/edit/qiZ6bkgZhoSn3XfJW2l7?p=preview

PS: Как я уже говорил, это очень грубое решение: если пользователь просто нажимает в любом месте диаграммы, clusters будет иметь новый пустой массив. Таким образом, вам придется изменить его в своих целях.

+0

Очень элегантное решение, прекрасно работает для того, что мне нужно. Спасибо! – Sekoul