2013-06-27 3 views
0

Это действительно странный вопрос. Я работаю над этим https://secure.polisci.ohio-state.edu/faq/d3/zoomabletreemap_code.php и в настоящее время пытается передать более одного параметра в treemap и попытаться суммировать их по стеку, так как в основном это делается в масштабируемой treemap.D3 Treemap множественный параметр, суммирующий стек

Код документированы для этого изменения определяется как:

// Aggregate the values for internal nodes. This is normally done by the 
// treemap layout, but not here because of our custom implementation. 
function accumulate(d) { 
return d.children 
? d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0) 
: d.value; 
} 

Но в моем подходе я должен суммировать с помощью более одного параметра, скажем, значение и считать. Я попытался изменить тот же код, чтобы добавить два параметра, но это не показалось, что сделать трюк, может кто-то наставит меня пожалуйста:

function accumulate(d) { 
    return d.children 
    ? d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0) 
    : d.value; 
    } 
     function accumulate1(d) { 
    return d.children 
    ? d.count = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0) 
    : d.count; 
    } 

Как две отдельные функции, а затем вызвать их отдельно суммировать как количество и значение для стека, начиная с листовых узлов. Но это не работает. Не могли бы вы направить меня?

+0

Ну, это, вероятно, слишком поздно для neoeahit (и к тому же, ответ Ларса, казалось, сделать трюк для конкретного случая), но основная причина, по которой две разные функции не работали, состоит в том, что вторая функция по-прежнему вызывает «накапливать (v)», когда вместо этого она должна вызывать «accumulate1 (v)» для правильной коррекции. При этом изменении каждый узел будет иметь два разных накопленных свойства: один для значения и один для подсчета. – AmeliaBR

ответ

0

Вы должны быть в состоянии суммировать оба значения в accumulate функции:

function accumulate(d) { 
    return d.children 
    ? d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0) 
    : d.value + d.count; 
} 
+0

Спасибо за быстрый ответ. Я действительно ценю это! Я не могу получить вас на второй части здесь, что вы подразумеваете под использованием .sum? – neoeahit

+0

Код хранит сумму '.value' и' .count' в новом атрибуте '.sum'. Это то, что вам нужно будет использовать при создании treemap. –

+0

Хорошо, я тебя понимаю. Но у меня было заблуждение, что агрегация была основана на значении и суммировала все. Мне жаль, что я новичок и пытаюсь учиться. Учитывая этот пример: https://secure.polisci.ohio-state.edu/faq/d3/zoomabletreemap_code.php, где вы это новое изменение было реализовано. Я думаю, что вы имеете в виду [я мог бы быть неправильно], что рисование TreeMap на основе .sort (функция (а, Ь) {возвращение a.sum - b.sum;}) На самом деле я хочу сделать он основан на «счете» и окрашивает узлы на основе «значения», поэтому я просто хочу нарисовать его на основе одного домена. – neoeahit