【问题标题】:(JGraphT) Export Graph<String, DefaultEdge> as DOT(JGraphT) 将 Graph<String, DefaultEdge> 导出为 DOT
【发布时间】:2020-04-09 18:25:35
【问题描述】:

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

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

Graph<String, DefaultEdge> graph

【问题讨论】:

    标签: graph dot jgrapht


    【解决方案1】:

    以下是使用DOTExporter 以 DOT 格式导出图形的两个示例。在第一个示例中,没有提供 vertexIDProvider。结果,导出器不知道如何命名您的顶点,因此它只是为每个顶点分配一个唯一编号。在第二个示例中,我提供了vertexIDProvidervertexIDProvider 是一个 Function&lt;V,​String&gt; 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 中找到更详细的示例。更多示例可以在DOTExporterTest 类中找到。

    【讨论】:

    • 感谢乔里斯的帮助。我现在已经自己弄清楚了。 :)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多