Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Networkx: how to show node and edge attributes in a graph drawing

Tags:

I have a graph G with attribute 'state' for nodes and edges. I want to draw the graph, all nodes labelled, and with the state marked outside the corresponding edge/node.

for v in G.nodes():          G.node[v]['state']='X' G.node[1]['state']='Y'  G.node[2]['state']='Y'  for n in G.edges_iter():         G.edge[n[0]][n[1]]['state']='X' G.edge[2][3]['state']='Y' 

The command draw.networkx has an option for labels, but I do not understand how to provide the attribute as a label to this command. Could someone help me out?

like image 440
Bravo Avatar asked Dec 04 '13 17:12

Bravo


1 Answers

It's not so pretty - but it works like this:

from matplotlib import pyplot as plt import networkx as nx G = nx.Graph() G.add_edge(1,2) G.add_edge(2,3) for v in G.nodes():     G.node[v]['state']='X' G.node[1]['state']='Y' G.node[2]['state']='Y'  for n in G.edges_iter():     G.edge[n[0]][n[1]]['state']='X' G.edge[2][3]['state']='Y'  pos = nx.spring_layout(G)  nx.draw(G, pos) node_labels = nx.get_node_attributes(G,'state') nx.draw_networkx_labels(G, pos, labels = node_labels) edge_labels = nx.get_edge_attributes(G,'state') nx.draw_networkx_edge_labels(G, pos, labels = edge_labels) plt.savefig('this.png') plt.show() 

enter image description here

like image 127
Aric Avatar answered Sep 17 '22 10:09

Aric