【问题标题】:Add graphviz plot inside matplotlib在 matplotlib 中添加 graphviz 图
【发布时间】:2021-02-16 05:42:23
【问题描述】:

我正在使用networkx 可视化各种网络。看一个简单的例子

    graph = nx.DiGraph()
    graph.add_edge("a", "b")
    graph.add_edge("a", "a")
    nx.draw(graph)
    plt.show()

不幸的是,networkx 绘图不会呈现自循环。我知道其他功能丰富的软件包,例如 GraphViz 及其实现 pygraphviz。但是,这些包不允许我自定义我的图(如子图、注释等)。我可以使用networkx 完成所有这些操作,因为它可以使用matplotlib Axes 进行绘图。这对于编程操作和大量自定义非常方便。有没有办法让GraphVizmatplotlib 的网络绘图?

我总是可以使用imshowGraphViz 创建的PNG 嵌入到matplotlib 绘图中。然而,它的结果很糟糕,几乎没有自定义控制。

【问题讨论】:

    标签: python matplotlib networkx graphviz


    【解决方案1】:

    我不确定你为什么说 networkx 不呈现自循环。这不是你要找的吗?

    import networkx as nx
    from matplotlib import pyplot as plt
    
    graph = nx.DiGraph()
    graph.add_edges_from([("a", "b"), ("a", "a"), ("b", "b"), ("c", "b"), ("c", "c")])
    nx.draw(graph, with_labels=True)
    plt.show()
    

    【讨论】:

      【解决方案2】:

      这似乎还不存在。如果你想自己实现它,有几个选项。如果您想将布局留给 Graphviz,而只将形状和位置交给 Matplotlib,则剩下两个选项来获取渲染所需的数据:

      1. 您将二进制文件(如 dot)与 -Tjson option 一起使用,这似乎会发出所有必要的绘图数据,但我没有找到文档,例如ops 是。
      2. Use Graphviz as a Library。第 2.3 节(渲染图表)介绍了如何访问数据。

      然后您将这些数据输入到Axes'Artist (tutorial)。 Matplotlib 还有一个tutorial for how to draw paths

      【讨论】:

        猜你喜欢
        • 2017-07-20
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-08
        • 2012-03-04
        • 2010-11-26
        相关资源
        最近更新 更多