【问题标题】:D3 - create network graph from 2 column list of nodesD3 - 从 2 列节点列表创建网络图
【发布时间】:2016-02-21 05:28:32
【问题描述】:

我们编制了一份包含 SQL 和 Web 服务器的 2 列电子表格,它们每天都相互通信:

Source,Target  
sql1,web1  
sql1,web2  
sql2,web2  
sql2,sql1  
sql2,web3  
web2,web3  
web3,web2
web3,sql2

我想根据上述数据创建一个“漂亮”和simple D3 graph,(不一定是那个,即使是静态图也可以)。流向并不那么重要。但是,每个组(SQL 或 WEB)都需要使用不同的颜色。

但是,D3 要求数据为 json 格式。

如何让 D3 代码接受我的 2 列数据?
或如何将我的 2 列数据转换为 D3 代码所需的 JSON 格式?如果有人可以指导,我很乐意编写 T-SQL 代码。

【问题讨论】:

  • 您提供的示例是使用 JSON 数据。它有组和链接。您能否提供您需要的 JSON 格式?这样就可以进行转换了。
  • 我的问题 - 如何将我的 2 列数据转换为示例所需的 JSON 格式,或者如何使示例接受我的 2 列数据
  • 最终的 JSON 不是可以设计的问题。您将如何提供上述数据是 csv 还是 tsv ...或其他任何东西?
  • 我可以使用任何格式 - csv、制表符分隔、excel、sql 表。我刚刚在上面的数据中添加了逗号

标签: json d3.js


【解决方案1】:

我们的目标是加载您的 CSV 并转换为强制有向图 d3 所期望的 JSON 结构。

为此:

  //load your CSV via ajax as below
  d3.csv("my.csv", function(json) {
  //load the csv as json
  //array of nodes
  var nodes = [];
  /array of links
  var links = [];
  json.forEach(function(d){
    //check if node is present if not add that in the array to get unique nodes.
    if (nodes.indexOf(d.Source.trim()) <0){
      //sorce node not there so add
      nodes.push(d.Source.trim())
    }
    if (nodes.indexOf(d.Target.trim()) <0){
      //target node not there so add
      nodes.push(d.Target.trim())
    }
    //link to map the nodes with its index.
    links.push({source:nodes.indexOf(d.Source.trim()), target:nodes.indexOf(d.Target.trim())})
  });
  nodes = nodes.map(function(n){
    return {name:n}
  })
  //now the usual code for force graph.

现在将节点和链接提供给力有向图。

工作代码here

【讨论】:

  • 效果很好!您知道是否有办法为 D3 中的每个组添加颜色,例如红色的 SQL 和蓝色的 WEB?我尝试查看类似的question,但无法弄清楚
  • 就像您提到的示例一样,您没有组。所以我使用节点名称为文本着色。 node.append("text") .attr("dx", 12) .attr("dy", ".35em") .attr("fill", function(d){return color(d.name)}) 在这里提琴plnkr.co/edit/N4zUwNJOLptops23gWTd?p=preview
  • 我需要在哪里添加群组信息?如果我使用服务器和组创建另一个 csv,那会起作用吗?或者为了让生活更轻松,我可以自定义你正在调用的'color'函数,当传递name参数时,会检查它是否像'%sql%',然后返回'red',如果像'web'那么“蓝色”?
  • 是的,后面的部分会检查它是否像'%sql%',然后返回'red',如果像'web'则'blue'也不错想法,是的,你可以这样做
猜你喜欢
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2023-02-16
  • 2012-11-01
相关资源
最近更新 更多