2014-01-30 3 views
0

Как обновить вертикальную гистограмму в d3 после сортировки массива объектов, содержащих мои данные?d3 сортировка массива объектов

Моя (конечно, мелкая) проблема лучше всего видно здесь: http://jsfiddle.net/yJq3e/3/

После создания бара, я вызываю функцию sortBars(), которая прекрасно работает (как console.log может сказать мне), пока я не обновит у-атрибута. Я предполагаю, что он связан с атрибутом y, который фактически зависит от индекса (или ключа?). Тем не менее, я бы подумал, называя

.attr("y", function(d) { return y(d.name); }) 

на .bar снова после атрибута по сортировке должно хватить, как это происходит, когда я установил атрибут для начального положения стержней.

любая помощь очень ценится!

ответ

2

Что бы вы сделали в D3, необходимо отсортировать базовые данные и передать их на .data(). Например:

svg.selectAll(".bar") 
    .data(dataset.sort(function(a, b) { return b.value - a.value; })) 

Остальная часть кода может не измениться. Я добавил переход, чтобы сделать его более приятным. Полный пример here.

+0

Это имеет большой смысл! Похоже, что он не прикасается к ней, хотя. Использование 'd3.descending' не меняет этого. Опять же, 'console.log' показывает правильный порядок, но бары заканчиваются другим, но все же неупорядоченным способом. Любые идеи верхушки? – lve

+0

Проблема в том, что позиция 'y' определяется именем, которое не изменяется. Вы могли бы определить его на основе индекса точки данных - http://jsfiddle.net/yJq3e/10/ –

+0

Я бы проголосовал за ваш ответ, если бы у меня была репутация. Вернусь, когда я вырасту ... очень обязан! – lve

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