我想使用DiGraph of networkx
创建一个无向图。我想要不同的标签在边缘为相对边缘。我的代码是:
G = nx.DiGraph()
nodes = [1, 2, 3]
edges = [
(1, 2, {"label": "1-2"}),
(2, 3, {"label": "2-3"}),
(3, 1, {"label": "3-1"})
]
G.add_nodes_from(nodes)
G.add_edges_from(edges)
edge_labels = nx.get_edge_attributes(G,'label')
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos=pos)
nx.draw_networkx_labels(G, pos=pos)
nx.draw_networkx_edges(G, pos=pos)
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge_labels)
plt.show()
但是我想添加另一个优势,例如从节点1到3,使用不同的标签。我试图添加边缘(1, 3, {"label": "1-3"})
。它只是使边缘从3到1被指向,而忽略标签。所以输出是:
编辑:,所以我发现直接使用graphviz
解决方案要容易得多。我的代码是:
from graphviz import Digraph
G = Digraph('G')
G.attr('graph', pad='1', ranksep='1', nodesep='1')
G.attr('node', shape='note')
G.node('A', 'A')
G.node('B', 'B')
G.node('C', 'C')
G.edge('A', 'B', 'A-B')
G.edge('B', 'A', 'B-A')
G.edge('A', 'C', 'A-C')
G.edge('C', 'A', 'C-A')
G.edge('B', 'C', 'B-C')
G.edge('C', 'B', 'C-B')
G.view()
这是预期的产出:
感谢每一个想帮忙的人:)
发布于 2021-04-24 00:00:50
您可以使用MultiDiGraph
:可以存储多条边的有向图类。
多边是两个节点之间的多个边。每个边缘都可以保存可选的数据或属性。
MultiDiGraph保持有向边。允许自我循环。
因此,只需更改为:
G = nx.MultiDiGraph()
发布于 2022-02-16 18:55:45
可以通过添加connectionstyle='arc3, rad=0.1'
来分隔边缘,但不能以相同的方式分隔边缘标签:
nx.draw_networkx_edges(G, pos=pos, connectionstyle='arc3, rad=0.1')
https://stackoverflow.com/questions/67237994
复制相似问题