(JGraphT) 将图形<String, DefaultEdge> 导出为 DOT

(JGraphT) Export Graph<String, DefaultEdge> as DOT

我使用 jgrapht 库,我已经将 Strings 的 Graphs 作为 verticesDefaultEdges 作为 。 现在我想知道如何以 DOT 格式导出我的图表。 出口的最佳方法是什么? 从我了解的 jgraph 文档中,我可以使用 DOTExporter class https://jgrapht.org/javadoc/org/jgrapht/nio/dot/DOTExporter.html 为了实例化 class 我需要一个 Writer 和一个 VertexProvider ,我很难从给定的图中实例化它们。

这是我要导出的图表类型:

Graph<String, DefaultEdge> graph

以下是使用 DOTExporter 以 DOT 格式导出图形的两个示例。在第一个示例中,没有提供 vertexIDProvider。结果,导出器不知道如何命名您的顶点,所以它只是为每个顶点分配一个唯一的编号。在第二个例子中,我提供了一个vertexIDProvidervertexIDProvider 是一个 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;
}

可以在 user documentation.More examples can be found in the DOTExporterTest class.

中找到更详细的示例

这是我现在将图表导出为 .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);