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

use*_*720 7 xml json graphml d3.js 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>
Run Code Online (Sandbox Code Playgroud)

....

小智 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)
Run Code Online (Sandbox Code Playgroud)

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