等级:初学者。
我正在查看在D3中实现的sankey,显示的示例似乎都使用来自JSON或CSV的数据,而不是简单地使用对象或数组。可能采用不同方式的一两个似乎使用长途跋涉而不是简化问题。
有没有办法只在代码中加载数据而不必将数据格式化为外部文件?谢谢!
答案 0 :(得分:0)
如果您在没有执行任何异步操作的情况下可以获得数据,那么您可以按如下方式实现此目的,替换d3.json
行
d3.json("sankey-formatted.json", function(error, graph) {
// ...
})
使用自定义加载功能,例如
loadData(function (graph) {
// contents of the function passed to d3.json
})
函数loadData
现在接收一个函数作为参数,应该用你拥有的数据调用它,它可以是一个普通的JS对象
function loadData(cb) {
var data = {
"nodes":[
{"node":0,"name":"node0"},
{"node":1,"name":"node1"},
{"node":2,"name":"node2"},
{"node":3,"name":"node3"},
{"node":4,"name":"node4"}
],
"links":[
{"source":0,"target":2,"value":2},
{"source":1,"target":2,"value":2},
{"source":1,"target":3,"value":2},
{"source":0,"target":4,"value":2},
{"source":2,"target":3,"value":2},
{"source":2,"target":4,"value":2},
{"source":3,"target":4,"value":4}
]}
// invoke the function passed as an argument
cb(data)
}
这将是艰难的方式,简单的方法是摆脱该功能,并有一个graph
变量直接保存数据
var graph = { /* the nodes and links are here */ }
// contents of the function passed to d3.json