如何在Java中生成GraphML文件。Gephi、JGraph、Prefuse等。

7

帮帮我!我正在寻找创建一个Java应用程序生成一个图形,可以使用以下任一格式之一:

  • .graphml
  • .ygf
  • .gml
  • .tgf

我需要能够在图形编辑器"yEd"打开文件

到目前为止,我已经找到了以下解决方案:

  1. yFiles For Java
    • Pro: 能够导出 graphml,可以在 yEd 中打开,基于 Java,完美。
    • 为什么我不能使用它:使用它需要花费我超过$2000,然而这正是我所需要的。
  2. Gephi
    • 优点:免费,能够导出 graphml,基于 Java!
    • 我为什么不能使用它:当我尝试在 yEd 中打开生成的 graphml 文件时,graphml 已损坏:它是线性的 - 一行,就像这个截图
    • enter image description here
    • 如果我能用它,那就太完美了。
    • 我尝试生成的图是使用他们的示例项目生成的。
  3. JGraphX
    • 优点:能够生成图形,基于 Java,免费
    • 为什么我不能使用它:如何将生成的图形导出为 graphml?我没能弄清楚...
  4. Prefuse
    • 优点:免费,生成图形,基于 Java
    • 我为什么不能使用它:似乎我只能读取 graphml,而不能写入 graphml。此外,我使用 build.sh all 成功构建了演示项目,但当我尝试运行 demos.jar 时,出现“无法加载主类”的错误...
  5. BlueprintsGraphML Reader and Writer Library (Tinkerpop?)
    • 优点:Java、免费,看起来可以使用它导出 graphml。
    • 我为什么不能使用它:我很困惑,我需要与列出的一个“实现”一起使用它吗?我该怎么使用它?
  6. JGraphTGraphMLExporter
    • 优点:能够生成图形,基于 Java,免费,我想它可以导出 graphml。
    • 为什么我不能使用它:我不知道如何导出它!当我尝试在 yed 中打开生成的 graphml 时,我得到了“yEd 遇到以下错误无法导入文件 test.graphml。”我使用他们的示例项目,并做了这个:

我使用的JGraphT代码:

UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

String v1 = "v1";
String v2 = "v2";
String v3 = "v3";
String v4 = "v4";

// add the vertices
g.addVertex(v1);
g.addVertex(v2);
g.addVertex(v3);
g.addVertex(v4);

// add edges to create a circuit
g.addEdge(v1, v2);
g.addEdge(v2, v3);
g.addEdge(v3, v4);
g.addEdge(v4, v1);


FileWriter w;
try {
GmlExporter<String, DefaultEdge> exporter = 
    new GmlExporter<String, DefaultEdge>(); 
    w = new FileWriter("test.graphml");
    exporter.export(w, g);
} catch (IOException e) {
    e.printStackTrace();
}

有什么想法吗?谢谢!

你找到解决方案了吗?我正在尝试寻找一个Java库,可以创建图形,然后将其导出为graphml。 - Twi
它应该能够与问题中的代码草图一起使用JgraphT,只需要进行一些改进。 有关示例和提示: https://github.com/Systemdir/GML-Writer-for-yED https://daniel-ebert.github.io/jgrapht-graph-exporting-examples/ - TheAppService
6个回答

8
可能有点晚了,但对于第二种解决方案: 在将图形导入yEd后,立即单击“布局”并选择一个。 yed不会默认为您选择一个,这就是为什么它似乎是线性的原因。

3

我曾经希望能将JgraphT图表导出到yED,但对结果不满意。因此,我创建了一个扩展版的GMLWriter,支持yED特定的GML格式(分组、颜色、不同类型边缘等等)。

GML-Writer-for-yED


2

我不确定这是否符合你的使用场景,但我使用neo4j创建一个图形,然后使用neo4j-shell-tools将图形导出为graphml格式。也许这对你有用。


不确定Gephi的GraphML导出是否有问题:作为参与Gephi社区的成员,我没有看到任何报告。因此,我刚刚尝试了在GraphML格式下从Gephi导出网络,然后将此GraphML文件打开到NodeXL(另一个GraphML阅读器!),并且网络显示正常。也许yED导入程序有问题? - seinecle

2

只需在您的代码中将每个GmlExporter替换为GraphMLExporter。这样就可以了。


1
我正在使用Prefuse库,您可以使用GraphMLWriter类从Graph对象生成GraphML文件。

0

我创建了一个小的教程/Github仓库和示例代码,介绍如何使用JgraphT类导出到GraphML和GML,并展示在yED中的结果。

正如在另一个答案中已经提到的,如果您不想自己进行太多配置,yED的GML编写器可能会很方便。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接