作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下图:
graph = {("A","A"): 3, ("A","B"): 4, ("A","C"): 1}
我正在尝试绘制一个图表,显示节点 ("A") 中标有数字 3 的循环。该循环看起来应该类似于节点 (1) here 的循环。 .
它必须是一个间接图。
到目前为止,我正在使用这个:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.Graph()
for edge in graph:
G.add_edge(edge[0], edge[1])
graph_pos=nx.shell_layout(G)
nx.draw_networkx_nodes(G,graph_pos)
nx.draw_networkx_edges(G,graph_pos)
nx.draw_networkx_labels(G, graph_pos)
nx.draw_networkx_edge_labels(G, graph_pos, edge_labels = graph)
plt.show()
输出是:
如您所见,即使存在边 ("A", "A"),节点 "A"周围也没有环路。关于如何实现它的任何想法?
编辑 - 为什么不重复?
问题Matplotlib and Networkx - drawing a self loop node用于有向图。当您使用 G=nx.MultiDiGraph
创建图形时,您可以使用 G.graph['edge']
设置边的属性。
使用 nx.Graph()
(间接图),G.graph['edge']
的结果是一个空字典。
那个问题和这个问题之间的区别本质上是我使用 nx.Graph
而那个问题使用 nx.MultiDiGraph
。
最佳答案
体育课Normand 的回答让我看了一下 graphviz
并且我意识到,如果我将有向图的 arrowsize
更改为 0,它看起来像一个间接图。使用它我可以重用 Matplotlib and Networkx - drawing a self loop node 中的答案, 但我仍然缺少标签边缘。使用答案 here我设法创建了下图:
import networkx as nx
from networkx.drawing.nx_agraph import to_agraph
graph = {("A","A"): 3, ("A","B"): 4, ("A","C"): 1}
G=nx.MultiDiGraph()
# add edges
for edge in graph:
G.add_edge(edge[0], edge[1])
# arrow size: '0' makes it look like an indirected graph
G.graph['edge'] = {'arrowsize': '0', 'splines': 'curved'}
G.graph['graph'] = {'scale': '3'}
A = to_agraph(G)
A.layout('dot')
# set edge labels
for pair in graph:
edge = A.get_edge(pair[0], pair[1])
edge.attr['label'] = str(graph[pair]) + " "
A.draw('test.png')
这是图表:
这个答案可能与有向图的问题重复,我仍然认为保持对间接图的小调整是值得的。
关于python - 如何在 networkx 无向图中绘制环边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128561/
我是一名优秀的程序员,十分优秀!