2016-06-21 3 views
3

Я создаю диаграмму Санки с помощью плагина D3 Sankey. У меня есть стандартные столбцы: источник, цель, значение плюс еще один столбец с именем nodeColor. Я хотел бы, чтобы цвет целевого узла определялся цветом, отмеченным в столбце «nodeColorTarget». Я смог изменить исходный код для всех узлов одного цвета. Однако мне не удалось создать функцию для использования дополнительного столбца, чтобы диктовать цвет.Изменить цвета узлов в d3 Sankey Diagram на основе дополнительного столбца в данных

Образец данных:

source,target,value,nodeColorTarget 
Dist A,Place1,1,red 
DistB,Place1,5,red 
DistB,Place2,2,grey 
DistB,Place2,1,grey 
DistB,Place3,2,blue 

Существующий код:

// add the rectangles for the nodes 
    node.append("rect") 
     .attr("height", function(d) { return d.dy; }) 
     .attr("width", sankey.nodeWidth()) 
     .style("fill", "red") 
     //.style("fill", function(d) { 
      //return d.color = color(d.name.replace(/ .*/, "")); }) 
     //.style("stroke", function(d) { 
     // return d3.rgb(d.color).darker(2); }) 
    //.append("title") 
    // .text(function(d) { 
     // return d.name + "\n" + format(d.value); }); 

Мой полный код here.

+0

Я обновил ответ –

ответ

3

Сначала нужно добавить атрибут подобного:

graph.nodes.push({ "name": d.source, "color": d.nodeColorTarget }); 

Тогда вы можете назвать это так:

.style("fill", function(d) { return d.color;}) 

Смотрите этот пример: http://plnkr.co/edit/4xPx05PxnWxoQBhIj2lo?p=preview

PS: Я сделал некоторые незначительные изменения по мере изменения структуры данных данных

+0

в приведенном примере Я вижу, что цвета изменились. Однако диаграмма больше не верна. Вместо того, чтобы иметь слева направо и цели справа, они теперь перемежаются. Например, вы видите DisB с правой стороны. Кроме того, между DistB и Place3 нет стрелок потока. В правом нижнем углу есть пустые пустые узлы. Любая идея о том, как это исправить? – Danny

+1

Исправлено, я забыл удалить дубликаты, см. Обновленную скрипту http://plnkr.co/edit/4xPx05PxnWxoQBhIj2lo?p=preview –

+0

Спасибо, что работает. Я скорректировал ваш ответ, чтобы включить конкретные фрагменты кода, которые необходимо изменить. – Danny