Я пытаюсь создать иерархический график, используя vis.js.Я могу создать иерархический график, но компоновка - это не то, что я ищу: узлы находятся на казалось бы произвольных уровнях.Я хочу, чтобы узлы находились на разных уровнях в зависимости от количества ребер между ними и корнем.
Данные изначально получены из SQL.В настоящее время у меня есть скрипт Python, который обрабатывает данные на языке DOT (и я могу отображать график с макетом, который я хочу, используя Graphviz), поэтому я использую метод .convertDot.Я мог бы повторно обработать сеть после импорта в vis.js и добавить правильный атрибут «level» для каждого узла по отдельности, но должен быть лучший способ.
Вот полный документ HTML / JS, который ядо сих пор:
<!DOCTYPE HTML>
<html>
<head>
<script src="./vis/dist/vis.js"></script>
<link href="./vis/dist/vis.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="graph", style="height: 1000px"></div>
<script>
// provide data in the DOT language
var DOTstring = 'digraph {"13332500" -> "13483400" "13567500" -> "13483400" "10037901" -> "10037902" "10037902" -> "13483400" "15038400" -> "13455700" "13455700" -> "13455702" "13455702" -> "13483400" "13567300" -> "13483400" "11890500" -> "13483400" "13483400" -> "13554900"}';
var parsedData = vis.network.convertDot(DOTstring);
var data = {
nodes: parsedData.nodes,
edges: parsedData.edges
}
var container = document.getElementById('graph');
var options = parsedData.options;
// you can extend the options like a normal JSON variable:
options.layout = {
"hierarchical": true
}
// create a network
var network = new vis.Network(container, data, options);
</script>
</body>
</html>
Вот то, что код будет производить: И вот макет, который я ищу, как произведено graphviz:
Если вам интересно, почему я пытаюсь сделать это в vis.js, когда он уже работает в Graphviz: причина в том, что я хочу сделать его интерактивным.