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绘制定向和标记的多图,如所述: