使用graphml文件进行d3.js强制定向布局

时间:2012-10-31 13:52:56

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

如何在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>

...

4 个答案:

答案 0 :(得分:2)

继@fccoelho后,Anders Eriksen (anderser)汇总了一个GraphML XML转换为d3 JSON format的示例,其中包含here ({ {3}})

GitHub gist&lt; - GraphML-to-d3_JSON

Python脚本利用convert.pyPython-louvain库。

答案 1 :(得分:2)

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

fileprivate let imageManager = PHCachingImageManager()

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

答案 2 :(得分:1)

答案 3 :(得分:0)

好的,我终于找到了一些方法将图形转换为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")