Там нет предписанного формата , так как вы обычно можете переопределять свои данные с помощью различных функций доступа (например, hierarchy.children) и array.map. Но формат, который вы цитируете, вероятно, является наиболее удобным представлением для деревьев, потому что он работает с аксессуарами по умолчанию.
Первый вопрос: собираетесь ли вы отображать graph или tree. Для графиков структура данных определена в терминах nodes и links. Для деревьев вход в макет - это корневой узел, который может иметь массив из child nodes, а у листовых узлов - value.
Если вы хотите отобразить диаграмму , и все, что у вас есть, это список ребер, то вы захотите перебрать по краям, чтобы создать массив узлов и массив ссылок. Скажем, у вас есть файл под названием «graph.csv»:
source,target
A1,A2
A2,A3
A2,A4
Вы можете загрузить этот файл, используя d3.csv, а затем произвести массив узлов и связей:
d3.csv("graph.csv", function(links) {
var nodesByName = {};
// Create nodes for each unique source and target.
links.forEach(function(link) {
link.source = nodeByName(link.source);
link.target = nodeByName(link.target);
});
// Extract the array of nodes from the map by name.
var nodes = d3.values(nodeByName);
function nodeByName(name) {
return nodesByName[name] || (nodesByName[name] = {name: name});
}
});
Вы можете затем передать эти узлы и ссылки на макете силы, чтобы визуализировать график:
Если вы хотите создать дерево , то вам нужно сделать несколько другую форму преобразования данных, чтобы накапливать дочерние узлы для каждого родителя.
d3.csv("graph.csv", function(links) {
var nodesByName = {};
// Create nodes for each unique source and target.
links.forEach(function(link) {
var parent = link.source = nodeByName(link.source),
child = link.target = nodeByName(link.target);
if (parent.children) parent.children.push(child);
else parent.children = [child];
});
// Extract the root node.
var root = links[0].source;
function nodeByName(name) {
return nodesByName[name] || (nodesByName[name] = {name: name});
}
});
Как так:
что вы имеете в виду "список смежности"? – jbabey
Я думаю, что он означает '[(A1, A2), (A2, A3), (A2, A4)]'? – sczizzo
@sczizzo: Да, вот что я имел в виду! Извините jbabey. Я должен был быть более ясным. – Legend