I´m programming a basic neural network and want to plot it as a picture. For that i created all the nodes and edges i need.
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)
the blue points (imagine them on all edges) are where i want to add a label onto the edges, but i dont know how to do it. Its supposed to work for any reasonable net size, i.e. it shoudl also work for 4, 3 and 2 neurons in the resprective layers.
An nbunch is a single node, container of nodes or None (representing all nodes). It can be a list, set, graph, etc.. To filter an nbunch so that only nodes actually in G appear, use G. nbunch_iter(nbunch) .
A DiGraph stores nodes and edges with optional data, or attributes. DiGraphs hold directed edges. Self loops are allowed but multiple (parallel) edges are not. Nodes can be arbitrary (hashable) Python objects with optional key/value attributes.
Returns True if the graph has an edge between nodes u and v. This is the same as v in G[u] or key in G[u][v] without KeyError exceptions.
Here is an example for ploting edge label in networkx, hope it will help you.
import matplotlib.pyplot as plt 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()
You can use draw_networkx_edge_labels(edge_labels) to draw label between edges.
edge_labels
is not given, the attributes of edge is used.edge_labels
should be a dictionary keyed by edge two-tuple of text labels. Only labels for the keys in the dictionary are drawn.To iterate through the edges of graph, you can use G.edges.
G.edges
returns a list of (node1, node2)
, where node1
and node2
are two nodes of the edge.G.edges(data=True)
returns a list of (node1, node2, ddict)
, where ddict
is edge attribute dict.G.edges(data=attr)
returns a list of (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()
With 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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With