Как создать файл graphml в Java. Gephi, JGraph, Prefuse и т. Д.

Помогите! Я ищу, чтобы создать приложение Java, которое генерирует график в любом из следующих форматов:

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

Мне нужно иметь возможность открыть файл в редакторе графиков "yEd".

До сих пор я нашел эти решения:

  1. yFiles для Java
    • Pro: Экспорт в graphml, возможность открытия в yEd, на основе Java, отлично.
    • Почему я не могу его использовать: это стоило бы мне более 2000 долларов:(это именно то, что мне нужно, однако
  2. Gephi
    • Pro: БЕСПЛАТНО, экспорт в graphml, на основе Java!
    • Почему я не могу его использовать: когда я пытаюсь открыть сгенерированный файл graphml в yEd, graphml ломается: он линейный - одна строка, как на этом скриншоте:
    • введите описание изображения здесь
    • Если я получу это на работу, то это идеально
    • График, который я пробовал, был сгенерирован на примере проекта
  3. JGraphX
    • Pro: Возможность генерировать график, на основе Java, бесплатно
    • Почему я не могу его использовать: Как экспортировать сгенерированный граф в graphml? Я не мог понять это...
  4. Prefuse
    • Pro: бесплатно, генерация графиков, на основе Java
    • Что я не могу использовать: Кажется, я могу только читать graphml, а не писать graphml. Кроме того, я собрал демо нормально с помощью build.sh all, но затем, когда я попытался запустить demos.jar, я получил сообщение "Не удалось загрузить основной класс"...
  5. Чертежи с помощью GraphML Reader и Writer Library ( Tinkerpop?)
    • Pro: Java, Free, кажется, что вы можете экспортировать GraphML с ним
    • Почему я не могу использовать это: я запутался, нужно ли использовать это в сочетании с одной из перечисленных "Реализаций"? Как мне это использовать?
  6. JGraphT с GraphMLExporter
    • Pro: Возможность генерировать граф, на основе Java, бесплатно, я могу экспортировать в GraphML, я думаю
    • Почему я не могу его использовать: я не могу понять, как его экспортировать! Когда я попытался открыть сгенерированный graphml в yed, я получил сообщение "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();
}

Есть идеи? Спасибо!

6 ответов

Решение

Я также хотел экспортировать графики JgraphT для yED, но не был доволен результатами. Поэтому я создал расширенный GMLWriter, поддерживающий определенный формат GML yED (группы, цвета, разные ребра,...).

GML-Writer-для-Yed

Возможно, будет поздно ответить, но для решения номер два: сразу после импорта графика в yEd просто нажмите "Макет" и выберите один. yed не выберет один для вас по умолчанию, поэтому он кажется линейным.

Я не знаю, подходит ли это для вашего случая использования, но я использую neo4j для создания графа, а затем использую https://github.com/jexp/neo4j-shell-tools для экспорта графа как graphml. Возможно, это будет работать для вас.

Просто замените каждый случай GmlExporter с GraphMLExporter в вашем коде. Это должно работать.

Я использую библиотеку de Prefuse, и вы можете сгенерировать файл GraphML из объекта Graph с помощью класса de GraphMLWriter.

Я создал небольшой репозиторий Tutorial/Github и пример кода о том, как работать с классами JgraphT для экспорта в GraphML и GML и как результаты могут выглядеть в yED.

Как уже упоминалось в другом ответе, если вы не хотите выполнять большую настройку самостоятельно, вам может пригодиться GML-Writer-for-yED.

Другие вопросы по тегам