Python networkx有向图:对边的不同标签

Python networkx有向图:对边的不同标签,python,matplotlib,graph,networkx,Python,Matplotlib,Graph,Networkx,我想使用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.a

我想使用
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()
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()

但是我想添加另一条边,例如从节点1到节点,使用不同的标签。 我试图添加边
(1,3,{“标签”:“1-3”})
。它只是使边从3到1定向,忽略标签。因此,输出为:

编辑: 因此,我发现直接使用
graphviz
解决方案要容易得多。 我的代码是:

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()
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()
这是预期的输出:
感谢所有试图提供帮助的人:)

您可以使用:

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

多重边是两个节点之间的多重边。每边都可以容纳 可选数据或属性

多有向图包含有向边。允许自循环

因此,只需改为:

G = nx.MultiDiGraph()

目前无法使用弯曲和标记的
matplotlib
边从
networkx
绘制,这是此处需要的,以避免相反边之间的重叠,从而隐藏标签。可以使用
networkx
和GraphViz绘制定向和标记的多图,如所述: