Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自循环图的边权标注_Python_Networkx_Graphviz - Fatal编程技术网

Python 自循环图的边权标注

Python 自循环图的边权标注,python,networkx,graphviz,Python,Networkx,Graphviz,@zohar.kom在回答我关于如何将我自己的标签字典添加到有向图中的问题时帮了我很大的忙 是否也可以设置“边”属性以包含具有自循环的加权有向图的边权重标签?例如,对于一个简单的加权有向图,有五个节点,标记为a、B、C、D和E,存储在一个名为labels的字典中 # Digraph from nonsymmetric adjacency matrix. A=npy.matrix([[2,2,7,0,0],[0,2,6,3,0],[0,0,0,2,1],[0,0,0,0,4], [4,0,0,

@zohar.kom在回答我关于如何将我自己的标签字典添加到有向图中的问题时帮了我很大的忙

是否也可以设置“边”属性以包含具有自循环的加权有向图的边权重标签?例如,对于一个简单的加权有向图,有五个节点,标记为a、B、C、D和E,存储在一个名为labels的字典中

# Digraph from nonsymmetric adjacency matrix.
 A=npy.matrix([[2,2,7,0,0],[0,2,6,3,0],[0,0,0,2,1],[0,0,0,0,4],
 [4,0,0,0,0]])
 labels={0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}
 G=nx.DiGraph(A)

 # Set node labels to A, B, C, D, E
 nx.set_node_attributes(G, {k:{'label':labels[k]} for k in 
 labels.keys()})
 D=to_agraph(G)

 # Modify node fillcolor and edge color.
 D.node_attr.update(color='blue',style='filled',fillcolor='yellow')
 D.edge_attr.update(color='blue',arrowsize=1,label="???")
 D.layout('dot')
 D.draw('Graph.eps')

有没有办法在我有的地方插入一些东西???要包含带标签的边权重,或者在使用D=to_agraph(G)之前在G上设置边属性的方法,可以按如下方式执行:

  • 创建原始(networkx)图形时读取边权重
  • 使用适当的值设置名为“label”的属性,例如,在您的情况下,它可以是权重值
  • 其余的保持不变:

    import networkx as nx
    import numpy as npy
    
    A = npy.matrix([[2, 2, 7, 0, 0], [0, 2, 6, 3, 0], [0, 0, 0, 2, 1], [0, 0, 0, 0, 4],
                    [4, 0, 0, 0, 0]])
    labels = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}
    G = nx.from_numpy_matrix(A, create_using=nx.DiGraph)
    
    # Set node labels to A, B, C, D, E
    nx.set_node_attributes(G, {k: {'label': labels[k]} for k in labels.keys()})
    nx.set_edge_attributes(G, {(e[0], e[1]): {'label': e[2]['weight']} for e in G.edges(data=True)})
    D = nx.drawing.nx_agraph.to_agraph(G)
    
    # Modify node fillcolor and edge color.
    D.node_attr.update(color='blue', style='filled', fillcolor='yellow')
    D.edge_attr.update(color='blue', arrowsize=1)
    pos = D.layout('dot')
    D.draw('Graph.eps')
    
    这里通过
    G=nx.from_numpy_matrix(A,create_using=nx.DiGraph)
    创建图形,它将保留权重(与原始实现不同)

    使用
    nx向边添加'label'属性。设置_edge_属性(G,{(e[0],e[1]):{'label':e[2]['weight']}用于G.edges中的e(data=True)}

    结果是:


    再次感谢您的帮助。不仅针对原始问题,还针对建议G=nx.from_numpy_matrix(A,使用=nx.DiGraph创建_)以保留权重。当然,乐意帮助:)顺便说一句,如果它回答了您的问题,您可以通过单击答案旁边的复选标记接受答案。在这里阅读更多-