Python 将具有非唯一节点的networkx图形对象存储为graphviz文件
我想在graphviz文件中存储一个具有非唯一节点的networkx对象。我使用标签在networkx中创建了非唯一节点。但它只能显示带有非唯一标签的节点Python 将具有非唯一节点的networkx图形对象存储为graphviz文件,python,graph,networkx,graphviz,dot,Python,Graph,Networkx,Graphviz,Dot,我想在graphviz文件中存储一个具有非唯一节点的networkx对象。我使用标签在networkx中创建了非唯一节点。但它只能显示带有非唯一标签的节点 G = nx.MultiDiGraph() G.add_node(0) G.add_node(1) G.add_node(2) labels = {0: 'a', 1: 'b', 2: 'a'} pos=nx.spring_layout(G) nx.draw_networkx_nodes(G,pos) nx.draw_networkx_edg
G = nx.MultiDiGraph()
G.add_node(0)
G.add_node(1)
G.add_node(2)
labels = {0: 'a', 1: 'b', 2: 'a'}
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
nx.draw_networkx_labels(MG,pos,labels,font_size=16)
这将给出最后一条语句和输出的返回值:
return value: {0: Text(-0.6135625730904766, -0.6074010681652476, 'a'),
1: Text(0.9319946933900001, -0.3925989318347525, 'b'),
2: Text(-0.31843212029952345, 1.0, 'a')}
是否有方法从draw_networkx_标签获取此输出并使用它创建graphviz文件。我需要graphviz文件输出中的非唯一节点。我试着做如下的事情:
x = nx.draw_networkx_labels(G,pos,labels,font_size=16)
write_dot(x, "dot.gv")
s = Source.from_file('dot.gv')
s.view()
这将引发错误,因为nx.draw\u networkx\u标签不返回上面打印的对象。如果我只使用G对象,它将不使用标签“a”和“b”。另外,有没有更简单的方法在networkx中创建非唯一节点?您将
节点
与节点标签
混淆了。在图中添加重复节点没有意义。但是,可以向图形中的现有节点添加非唯一标签
请看下面的代码:
import networkx as nx
G = nx.MultiDiGraph()
G.add_nodes_from(list(range(5)))
labels = {
0: 'a',
1: 'b',
2: 'a',
3: 'c',
4: 'd'}
G.add_edge(0, 1)
G.add_edge(2, 1)
G.add_edge(3, 2)
G.add_edge(3, 4)
# Add the labels as a separate attribute in each node
nx.set_node_attributes(G, labels, 'label')
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
nx.draw_networkx_labels(G,pos,labels,font_size=16)
现在以graphviz文件格式保存图形:
from networkx.drawing.nx_agraph import write_dot
from graphviz import Source
write_dot(G, "dot.gv")
Source.from_file('dot.gv')
正如您的问题所示,标签名称被保留。您可以进一步阅读pygraphviz文档,以进一步操作获得的图形
参考资料: