(JGraphT) 将图形<String, DefaultEdge> 导出为 DOT
(JGraphT) Export Graph<String, DefaultEdge> as DOT
我使用 jgrapht 库,我已经将 Strings 的 Graphs 作为 vertices 和 DefaultEdges 作为 边 。
现在我想知道如何以 DOT 格式导出我的图表。
出口的最佳方法是什么?
从我了解的 jgraph 文档中,我可以使用 DOTExporter class
https://jgrapht.org/javadoc/org/jgrapht/nio/dot/DOTExporter.html
为了实例化 class 我需要一个 Writer 和一个 VertexProvider ,我很难从给定的图中实例化它们。
这是我要导出的图表类型:
Graph<String, DefaultEdge> graph
以下是使用 DOTExporter
以 DOT 格式导出图形的两个示例。在第一个示例中,没有提供 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;
}
可以在 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);
我使用 jgrapht 库,我已经将 Strings 的 Graphs 作为 vertices 和 DefaultEdges 作为 边 。 现在我想知道如何以 DOT 格式导出我的图表。 出口的最佳方法是什么? 从我了解的 jgraph 文档中,我可以使用 DOTExporter class https://jgrapht.org/javadoc/org/jgrapht/nio/dot/DOTExporter.html 为了实例化 class 我需要一个 Writer 和一个 VertexProvider ,我很难从给定的图中实例化它们。
这是我要导出的图表类型:
Graph<String, DefaultEdge> graph
以下是使用 DOTExporter
以 DOT 格式导出图形的两个示例。在第一个示例中,没有提供 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;
}
可以在 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);