繁体   English   中英

在 matplotlib 中添加 graphviz 图

[英]Add graphviz plot inside matplotlib

我正在使用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 绘图。 这对于程序化操作和大量自定义非常方便。 有没有办法让GraphViz网络绘图到matplotlib

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

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

  1. 您将二进制文件(如dot )与-Tjson option 一起使用,它似乎发出了所有必要的绘图数据,但我没有找到关于op是什么的文档。
  2. 将 Graphviz 用作库 第 2.3 节(渲染图形)描述了如何访问数据。

然后,您将此数据输入AxesArtist (教程) Matplotlib 也有一个关于如何绘制路径教程

我不确定你为什么说 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()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM