gpt4 book ai didi

python - 如何在 networkx 无向图中绘制环边

转载 作者:行者123 更新时间:2023-11-28 18:08:32 25 4
gpt4 key购买 nike

我有下图:

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()

输出是:

enter image description here

如您所见,即使存在边 ("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')

这是图表:

enter image description here

这个答案可能与有向图的问题重复,我仍然认为保持对间接图的小调整是值得的。

关于python - 如何在 networkx 无向图中绘制环边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com