在D3 Sankey中,如何加载from对象或数组而不是json或csv文件?

时间:2016-05-28 00:19:32

标签: javascript json d3.js

等级:初学者。

我正在查看在D3中实现的sankey,显示的示例似乎都使用来自JSON或CSV的数据,而不是简单地使用对象或数组。可能采用不同方式的一两个似乎使用长途跋涉而不是简化问题。

有没有办法只在代码中加载数据而不必将数据格式化为外部文件?谢谢!

可用代码示例:http://bl.ocks.org/d3noob/c2637e28b79fb3bfea13

1 个答案:

答案 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