Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate a graphml file in Java. Gephi, JGraph, Prefuse, etc

Tags:

java

graphml

Help! I'm looking to create a Java application that generates a graph in any one of these formats:

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

I need to be able to open the file in the graph editor "yEd".

So far, I have found these solutions:

  1. yFiles For Java
    • Pro: Export to graphml, able to open in yEd, Java based, perfect.
    • Why I can't use it: Would cost me more than $2000 to use :( it is exactly what I need however
  2. Gephi
    • Pro: FREE, Export to graphml, Java based!
    • Why I can't use it: When I try to open the generated graphml file in yEd, the graphml is broken: it's linear - one line, like this screenshot:
    • enter image description here
    • If I get it to work, then this is perfect
    • The graph I tried was generated using their example project
  3. JGraphX
    • Pro: Able to generate a graph, Java based, FREE
    • Why I can't use it: How to export the generated graph to graphml? I couldn't figure it out...
  4. Prefuse
    • Pro: Free, graph generation, Java based
    • What I can't use it: Seems like I can only read graphml, and not write graphml. Also, I built the demos fine with build.sh all, but then when I tried to run demos.jar, I got "Failed to load Main-Class"...
  5. Blueprints with GraphML Reader and Writer Library (Tinkerpop?)
    • Pro: Java, Free, seems like you can export graphml with it
    • Why I can't use it: I'm confused, do I need to use this in conjunction with one of the "Implementations" listed? How do I use this?
  6. JGraphT with GraphMLExporter
    • Pro: Able to generate graph, Java based, free, can export to graphml I think
    • Why I can't use it: I can't figure out how to export it! When I tried to open the generated graphml in yed, I got "yEd has encountered the following error: Could not import file test.graphml." I used thier example project, and did this:

JGraphT Code I Used:

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();
}

Any ideas? Thanks!

like image 610
Katie Avatar asked Apr 28 '14 19:04

Katie


2 Answers

It might be late to answer, but for solution number two: Right after you import the graph into yEd, just click "Layout" and select one. yed will not choose one for you as default, that's why it seemed to be linear.

like image 198
inferno88 Avatar answered Nov 05 '22 15:11

inferno88


I also wanted to export JgraphT graphs for yED but was not happy with the results. Therefore, I created an extended GMLWriter supporting yED's specific GML format (groups, colours, different edges,...).

GML-Writer-for-yED

like image 36
H. Hess Avatar answered Nov 05 '22 15:11

H. Hess