2012-10-31 44 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