如何在Python中使用Networkx和matplotlib绘制自循环

如何在Python中使用Networkx和matplotlib绘制自循环,python,graph,matplotlib,networkx,Python,Graph,Matplotlib,Networkx,我正在使用networkx并尝试在图形中查找循环。 我编写了以下代码: import networkx as nx import matplotlib.pyplot as plt import pylab tg = nx.Graph() h_lat_dir = {1: [("A", "A"), ("B", "B"), ("A", "B")], 2: [("C", "D")], 3: [("C", "F")], 4: [("F", "F")], 5: [("C", "C"), ("C"

我正在使用networkx并尝试在图形中查找循环。 我编写了以下代码:

import networkx as nx
import matplotlib.pyplot as plt
import pylab

tg = nx.Graph()

h_lat_dir = {1: [("A", "A"), ("B", "B"), ("A", "B")], 2: [("C", "D")],
    3: [("C", "F")], 4: [("F", "F")], 5: [("C", "C"), ("C", "E"), ("D", "E"), ("E", "E")],
    6: [("D", "D")]}

for wght, edgelist in h_lat_dir.iteritems():
    tg.add_edges_from(edgelist, weight=wght)

print nx.cycle_basis(tg)


nx.write_dot(tg, 'multi.dot')
nx.draw_graphviz(tg)
pylab.show()
结果是

[['A'], ['B'], ['C'], ['F'], ['E', 'D', 'C'], ['D'], ['E']]
这幅画呢

为什么我看不到self_循环?(每个顶点都有一个)
是否可以以某种方式绘制它们?

使用NetworkX接口到Graphviz(通过pygraphviz或pydot):

然后跑

dot -Tpng graph.dot > graph.png

如果您可以使用graphviz,这里有一种方法(需要pygraphviz或pydot),您提供的示例适用于有向图。我的是无向的。我复制粘贴你的代码,运行命令,仍然得到一个有向的-没有自循环的图形???你能显示输出点文件和相关的图形吗?graph.dot:严格有向图{0->1;0->2;1->2;}和图像(我如何在这里上传?)与您的类似,具有定向边0->1 0->2 1->2,并且没有边1->1。pygraphviz或pydot(不确定您使用的是哪一个)安装似乎有问题。如果您使用nx.Graph()并将其发送到nx.write_dot(),那么在点输出中应该会得到一个图形,而不是有向图。遗憾的是,很多年后仍然无法这样做=(我希望networkx是从graphviz转换过来的工具,我想有一些简单的方法,基于adj矩阵交互式地绘制图形,生成点并用graphviz处理它是不可能的。
dot -Tpng graph.dot > graph.png