7

如何使用带有 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

4 回答 4

7

我会建议您将您的 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 最终文件中的源和目标已经是数字(不是字符)。

于 2017-12-07T02:44:25.963 回答
2

继@fccoelho 之后,Anders Eriksen (anderser)整理了一个使用 PythonGraphML XML 转换为d3 JSON 格式的示例,这里( GitHub gist )

convert.py <- GraphML-to-d3_JSON

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

于 2014-09-16T12:54:42.187 回答
1

使用 Python 和 networkX,您可以阅读 graphml:http ://networkx.lanl.gov/reference/generated/networkx.readwrite.graphml.read_graphml.html

然后以各种形式保存为 JSON:http: //networkx.lanl.gov/reference/readwrite.json_graph.html

于 2012-12-01T20:02:35.010 回答
-1

好的,我终于找到了将图形转换为符合 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")
于 2012-11-03T17:18:09.123 回答