2012-10-31 75 views
2

如何在d3.js中使用graphml文件? [我想绘制一个强制指导图]使用graphml文件获得d3.js强制定向布局

  • 将文件转换为.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> 

....

回答

1

我会建议你将你的graphml文件转换成json文件。我遇到同样的问题,这里是我如何使用python和networkx库转换graphml文件中JSON:

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) 

的在代码回路的节点ID转换成数字。这是非常重要的,因为json final文件中的源和目标已经是数字(不是字符)。

0

OK,我终于找到了一些办法图表转换成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") 
+0

试试clickme,一个R包,用R输入数据生成JS可视化http://bit.ly/rclickme – nachocab