2013-12-17 3 views
0

У меня есть два раскрывающихся меню, которые позволяют пользователю выбрать ось xy диаграммы рассеяния. В диаграмме рассеяния имеется также линия линейной регрессии, поэтому я хотел бы, чтобы она обновлялась по мере изменения значений на двух осях. Для этого я должен изменить два массива в var points соответственно, изменить значения х и/или оси уИзменение одного элемента массива массивов с событием

var points = dataset.map(function (d) { return [parseFloat(d.x), parseFloat(d.y)]; }); 

(я использую этот вид массива, потому что я использую библиотеку JS для вычисления значений регрессии)
d.x содержит значения оси x, d.y ось y.
То, что я хотел бы сделать, - это изменить только первый или второй массив внутри самого массива (d.x или d.y).
Для этого я поместил переменную внутри прослушивателя событий, но вот проблема, которую я не знаю, как решить:
Поскольку будет two event listeners, один для dx и один для dy, как я могу сказать в прослушивателе событий просто изменить значение d.x или d.y массива? Теперь у меня есть для оси х:

.on("change", function() { //other stuff happening, then: 
var points = dataset.map(function (d) { return [parseFloat(d[SelX]), parseFloat(d.y)]; }); 

SelX относится к значению х осей изменились, и работает, но я бы хотел, чтобы не изменить и значение d.y в массиве, я не» t знать правильный синтаксис для записи, не затрагивая также второе значение массива. Или, может быть, может быть лучше это решение: Поскольку var points указан перед событием .on change, можно ли ссылаться на первый или второй массив, поэтому мне не нужно вставлять все это внутри прослушивателя событий?

+0

Я не уверен, что вы просите. О каких слушателях событий вы говорите? Он также выглядит как 'd.x' и' d.y' - это отдельные значения, а не массивы. –

+0

Я отредактирую первое сообщение, чтобы сделать вещи более ясными – tomtomtom

+0

Надеюсь, что этот путь более понятен! Мне сложно объяснить, что я хочу делать со словами сегодня – tomtomtom

ответ

0

Похоже, что проще всего было бы ссылаться на текущие выбранные значения для x и y в глобальных переменных. Тогда код будет выглядеть примерно так.

var chosenX = "foo", chosenY = "bar"; 

// ... 
.on("change", function() { 
    chosenX = SelX; 
    points = dataset.map(function (d) { return [parseFloat(d[chosenX]), parseFloat(d[chosenY])]; }); 
}); 
+0

Просто хотел добавить, что для выполнения этой работы я сделал следующее: var selectedX = d3.keys (набор данных [0]). Filter (function (d) {return d == "foo";}); var selectedY = d3.keys (набор данных [0]). Filter (function (d) {return d == "bar";}); – tomtomtom

Смежные вопросы