我有一个图 G,其节点和边的属性为“状态”。我想绘制图形,标记所有节点,并在相应的边/节点外部标记状态。
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'
命令
draw.networkx
有一个标签选项,但我不明白如何提供该属性作为该命令的标签。有人可以帮我吗?
它不是那么漂亮 - 但它的工作原理是这样的:
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, edge_labels = edge_labels)
plt.savefig('this.png')
plt.show()
@Aric 的解决方案已经过时,不再运行。以下代码生成类似的图表。唯一的区别是下图将节点属性与节点标签分开绘制。
import networkx as nx
# define a graph
G = nx.Graph()
edges = [(1, 2), (2, 3)]
G.add_edges_from(edges)
# set node attributes
for n in G.nodes:
val = 'X' if n == 3 else 'Y'
nx.set_node_attributes(G, {n: {'state': val}})
# set edge attributes
for e in G.edges:
val = 'X' if e == (1, 2) else 'Y'
nx.set_edge_attributes(G, {e: {'state': val}})
pos = nx.spring_layout(G, seed=0)
# get edge and node attributes
edge_labels = nx.get_edge_attributes(G, 'state')
node_states = nx.get_node_attributes(G, 'state')
# set node state positions
state_pos = {n: (x+0.12, y+0.05) for n, (x,y) in pos.items()}
# draw graph
nx.draw_networkx(G, pos, node_size=600)
# draw node state labels
nx.draw_networkx_labels(G, state_pos, labels=node_states, font_color='red')
# draw edge attributes
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels);