首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >networkx DiGraph:针对相对边缘的不同标签

networkx DiGraph:针对相对边缘的不同标签
EN

Stack Overflow用户
提问于 2021-04-23 23:42:11
回答 2查看 795关注 0票数 2

我想使用DiGraph of networkx创建一个无向图。我想要不同的标签在边缘为相对边缘。我的代码是:

代码语言:javascript
运行
复制
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解决方案要容易得多。我的代码是:

代码语言:javascript
运行
复制
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()

这是预期的产出:

感谢每一个想帮忙的人:)

EN

回答 2

Stack Overflow用户

发布于 2021-04-24 00:00:50

您可以使用MultiDiGraph

:可以存储多条边的有向图类。

多边是两个节点之间的多个边。每个边缘都可以保存可选的数据或属性。

MultiDiGraph保持有向边。允许自我循环。

因此,只需更改为:

代码语言:javascript
运行
复制
G = nx.MultiDiGraph()
票数 1
EN

Stack Overflow用户

发布于 2022-02-16 18:55:45

可以通过添加connectionstyle='arc3, rad=0.1'来分隔边缘,但不能以相同的方式分隔边缘标签:

代码语言:javascript
运行
复制
nx.draw_networkx_edges(G, pos=pos, connectionstyle='arc3, rad=0.1')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67237994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档