【问题标题】:using a graphml file for d3.js force-directed layout使用 d3.js 强制导向布局的 graphml 文件
【发布时间】:2012-10-21 00:10:40
【问题描述】:

如何在 d3.js 中使用 graphml 文件? [我想画一个力有向图]

  • 将文件转换为 .json 是否更简单?如何 ?一直没找到转换器(我找到了python转换器,但我不是python用户)

  • 可以直接使用graphml文件吗?可能与 d3.xml 一起使用?

注意: graphml 是这样的

<graph id="G" edgedefault="directed">
<node id="n0">
  <data key="v_name">JohnMaynardKe...</data>
  <data key="v_label">John Maynard Ke...</data>
  <data key="v_size">4</data>
  <data key="v_label.cex">0.3</data>
  <data key="v_frame.color">#ffffff00</data>
  <data key="v_color">#54FF00CC</data>
</node>
<node id="n1">
  <data key="v_name">JosephA.Schum...</data>
  <data key="v_label">Joseph A. Schum...</data>
  <data key="v_size">4</data>
  <data key="v_label.cex">0.3</data>
  <data key="v_frame.color">#ffffff00</data>
  <data key="v_color">#54FF00CC</data>
</node>
<edge source="n0" target="n1">
  <data key="e_nombre">2</data>
  <data key="e_width">2</data>
  <data key="e_arrow.size">0</data>
  <data key="e_color">#00000021</data>
</edge>
<edge source="n0" target="n7">
  <data key="e_nombre">2</data>
  <data key="e_width">2</data>
  <data key="e_arrow.size">0</data>
  <data key="e_color">#00000021</data>
</edge>

....

【问题讨论】:

    标签: xml json d3.js graphml force-layout


    【解决方案1】:

    我会建议您将您的 graphml 文件转换为 json 文件。我遇到了同样的问题,下面是我如何使用 python 和 networkx 库在 json 中转换一个 graphml 文件:

    import networkx as nx
    import json
    from networkx.readwrite import json_graph
    import re
    
    G=nx.read_graphml('YourFile.graphml', unicode)
    data = json_graph.node_link_data(G)
    
    for node in data['nodes']:
      str=node['id']
      node['id']=[int(s) for s in str.split("n") if s.isdigit()][0]
    
    with open('YourFile.json', 'w') as f:
      json.dump(data, f, indent=4)
    

    代码中的 for 循环将您的节点 ID 转换为数字。这非常重要,因为 json 最终文件中的源和目标已经是数字(不是字符)。

    【讨论】:

      【解决方案2】:

      继@fccoelho 之后,Anders Eriksen (anderser) 整理了一个使用 Python 将GraphML XML 转换为d3 JSON format 的示例,here (GitHub gist)

      convert.py

      Python 脚本利用了Python-louvainNetworkx.github.io 库。

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          好的,我终于找到了将图形转换为符合 d3.js 的 .json 的方法 http://coulmont.com/blog/2012/11/03/reseau-d3js/ 这是通过 R 和 RJSONIO 库完成的(注解是法语)

          library(RJSONIO) 
          #creation de la partie qui renseigne les "nodes"
          temp<-cbind(V(g2)$name,V(g2)$group)
          colnames(temp)<-c("name","group")
          js1<-toJSON(temp)
          #creation de la partie qui renseigne les "liens"
          write.graph(g2,"Desktop/edgelist.csv",format="edgelist")
          edges<-read.csv("Desktop/edgelist.csv",sep=" ",header=F)
          colnames(edges)<-c("source","target")
          edges<-as.matrix(edges)
          js2<-toJSON(edges)
          #concatenation des deux parties
          reseau<-paste('{"nodes":',js1,',"links":',js2,'}',sep="")
          write(reseau,file="Desktop/reseau.json")
          

          【讨论】:

          • 试试 clickme,一个 R 包,用 R 输入数据生成 JS 可视化bit.ly/rclickme
          猜你喜欢
          • 2014-05-17
          • 1970-01-01
          • 1970-01-01
          • 2013-06-25
          • 2013-07-15
          • 2013-02-12
          • 2016-06-05
          • 2017-03-02
          • 2014-01-03
          相关资源
          最近更新 更多