Настройка D3 Sankey

#javascript #typescript #d3.js #sankey-diagram

Вопрос:

Большинство библиотек обеспечивают ограниченную настройку диаграммы Сэнки (например, цвет узла, ширина, заполнение).

Диаграмма Сэнки по умолчанию (d3):

введите описание изображения здесь

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

Мои требования:

введите описание изображения здесь

Кто-нибудь может мне помочь?

Ответ №1:

Немного банально, но вы можете переопределить правила CSS, чтобы стилизовать элементы так, как вы хотите.

Например, если у меня есть сгенерированная d3 диаграмма Сэнки в div с именем «сэнки», я могу добавить эти правила CSS, чтобы изменить элементы rect на красный, а элементы пути, которые образуют ссылки, на синий.

После очень краткого тестирования элементы rect, похоже, требуют модификатора CSS «!важно», поэтому комментарий об этом кажется немного банальным:

 #sankey > svg > g > g > g > rect {
    fill: red !important;
}

#sankey > svg > g > g > path {
    stroke: blue;
    stroke-opacity: 0.7;
}
 

Чтобы сделать прямоугольники больше, вы могли бы установить цвет их штриха таким же, как и заливка, и установить ширину штриха на что-то большее, а затем поиграть с параметром «nodePadding» в API d3.

Я прикрепил скриншот того, что я должен сделать, играя с этими:

введите описание изображения здесь

Ответ №2:

Без просмотра вашего кода — это игра в угадайку. Итак, я полагаю, вы использовали примеры сэнки D3.js в Интернете, которые в значительной степени используют один и тот же код. В какой-то момент вы могли бы увидеть что-то вроде этого:

 var sankey = d3.sankey()
    .nodeWidth(12)
    .nodePadding(12)
    .size([width, height]);
 

Пожалуйста, попробуйте повозиться с шириной узла (увеличьте значение), чтобы получить то, что вам нужно.