在networkx中标记边缘

Eum*_*mel 13 python networkx

我正在编写一个基本的神经网络,并希望将其绘制为图片.为此我创建了我需要的所有节点和边缘.

    for l, j in zip(self.layers, range(len(self.layers))):
        for n, i in zip(l.neurons, range(len(l.neurons))):
            fixed_positions[n.identifier] = (j, i)
    for l in self.layers:
        for n in l.neurons:
            for c, w in zip(n.inconnections, n.inconnectionweights):
               g.add_edge(n.identifier, c.identifier)
    fixed_nodes = fixed_positions.keys()
    pos = nx.spring_layout(g, pos=fixed_positions, fixed=fixed_nodes)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

蓝点(想象它们在所有边缘)是我想在边缘添加标签的地方,但我不知道该怎么做.它应该适用于任何合理的净大小,即它也适用于resprective层中的4,3和2个神经元.

Wub*_*ing 17

以下是在networkx中绘制边缘标签的示例,希望它能为您提供帮助.

import networkx as nx
edges=[['A','B'],['B','C'],['B','D']]
G=nx.Graph()
G.add_edges_from(edges)
pos = nx.spring_layout(G)
plt.figure()    
nx.draw(G,pos,edge_color='black',width=1,linewidths=1,\
node_size=500,node_color='pink',alpha=0.9,\
labels={node:node for node in G.nodes()})
nx.draw_networkx_edge_labels(G,pos,edge_labels={('A','B'):'AB',\
('B','C'):'BC',('B','D'):'BD'},font_color='red')
plt.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)

边缘标签

  • 投票减少,因为没有解释,只是一个代码团。 (3认同)

Ynj*_*jmh 15

您可以使用draw_networkx_edge_labels(edge_labels)在边缘之间绘制标签。

  • 如果edge_labels未给出,则使用边缘的属性。
  • edge_labels应该是由文本标签的边缘二元组键控的字典。仅绘制字典中键的标签。

要迭代图的边,可以使用G.edges

  • G.edges返回 的列表(node1, node2),其中node1node2是边的两个节点。
  • G.edges(data=True)返回 的列表(node1, node2, ddict),其中ddict是边缘属性字典。
  • G.edges(data=attr)返回一个列表(node1, node2, ddict[attr])
import matplotlib.pyplot as plt
import networkx as nx

G = nx.DiGraph()

G.add_edges_from([(1, 2), (1, 3), (2, 3)])

pos = nx.spring_layout(G)

nx.draw_networkx(G, pos)

edge_labels = dict([((n1, n2), f'{n1}->{n2}')
                    for n1, n2 in G.edges])

nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

G.edges(data=True)

import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()
G.add_edge(1, 2, weight=3)
G.add_edge(2, 3, weight=5)

pos = nx.spring_layout(G)

nx.draw(G, pos, with_labels=True)

edge_labels = dict([((n1, n2), d['weight'])
                    for n1, n2, d in G.edges(data=True)])

nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, label_pos=0.9,
                             font_color='red', font_size=16, font_weight='bold')

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Not*_*le1 6

您可以使用的边缘属性 G

nx.draw(G, with_labels=True, node_color='skyblue', edge_cmap=plt.cm.Blues, pos = pos)
edge_labels = nx.get_edge_attributes(G,'edge') # key is edge, pls check for your case
formatted_edge_labels = {(elem[0],elem[1]):edge_labels[elem] for elem in edge_labels} # use this to modify the tuple keyed dict if it has > 2 elements, else ignore
nx.draw_networkx_edge_labels(G,pos,edge_labels=formatted_edge_labels,font_color='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)