(JGraphT) Экспортный график как точка - PullRequest
0 голосов
/ 07 апреля 2020

Я использую библиотеку jgrapht и направляю графы с строками как вершинами и DefaultEdges как ребра . Теперь мне интересно, как экспортировать мой график в формате DOT. Каков будет лучший подход для экспорта? Из документации jgraph я понимаю, что я могу использовать класс DOTExporter https://jgrapht.org/javadoc/org/jgrapht/nio/dot/DOTExporter.html Для создания экземпляра этого класса мне нужны Writer и VertexProvider, который я изо всех сил пытаюсь создать из моего данного графа.

Это тип графика, который я хочу экспортировать:

Graph<String, DefaultEdge> graph

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Вот два примера экспорта графика в формате DOT с использованием DOTExporter. В первом примере vertexIDProvider не предоставляется. В результате экспортер не знает, как назвать ваши вершины, поэтому он просто присваивает каждой вершине уникальный номер. Во втором примере я предоставляю vertexIDProvider. vertexIDProvider - это Function<V,​String> vertexIdProvider, который отображает вершину в строку. Во втором примере я просто отображаю вершину в ее строковом представлении. Наконец, в примерах я использую простой Writer. В вашей реализации вы можете использовать FileWriter для записи результата в реальный файл.

//Create a graph with some vertices and edges
Graph<String, DefaultEdge> graph=new SimpleGraph<>(DefaultEdge.class);
Graphs.addAllVertices(graph, Arrays.asList("v1", "v2", "v3", "v4"));
graph.addEdge("v1", "v2");
graph.addEdge("v2", "v3");
graph.addEdge("v3", "v4");
graph.addEdge("v4", "v1");

//Create the exporter (without ID provider)
DOTExporter<String, DefaultEdge> exporter=new DOTExporter<>();
Writer writer = new StringWriter();
exporter.exportGraph(graph, writer);
System.out.println(writer.toString());

//Create the exporter (with ID provider)
DOTExporter<String, DefaultEdge> exporter2=new DOTExporter<>(v -> v.toString());
writer = new StringWriter();
exporter2.exportGraph(graph, writer);
System.out.println(writer.toString());

Вывод:

strict graph G {
  1;
  2;
  3;
  4;
  1 -- 2;
  2 -- 3;
  3 -- 4;
  4 -- 1;
}

strict graph G {
  v1;
  v2;
  v3;
  v4;
  v1 -- v2;
  v2 -- v3;
  v3 -- v4;
  v4 -- v1;
}

Более подробный пример можно найти в пользовательской документации . Больше примеров можно найти в DOTExporterTest класс.

0 голосов
/ 09 апреля 2020

Теперь я экспортирую свой график как .dot:

DOTExporter<String, DefaultEdge> exporter = new DOTExporter<>();
        exporter.setVertexAttributeProvider((v) -> {
            Map<String, Attribute> map = new LinkedHashMap<>();
            map.put("label", DefaultAttribute.createAttribute(v));
            return map;
});
Writer writer = new StringWriter();
exporter.exportGraph(Graph, writer);
...