节点颜色 Networkx Python 3.8
Node color Networkx Python 3.8
我正在 python 3.8 上使用 Networkx 创建一个图表,我想在我将节点附加到图表时为每个节点分配一种颜色,如下所示:
if raw_output in occurrencies_dict_gold:
G.add_node(raw_output, color = 'g')
else:
G.add_node(raw_output, color = 'r')
print('RED STATE : ', raw_output)
我在其中检查之前创建的特定字典中是否存在某个节点,因此我添加了该节点及其颜色。
我对边缘做同样的事情
if transition_key in transitions_dict_gold:
G.add_edge(previous_raw_output, raw_output, color = 'g')
else:
G.add_edge(previous_raw_output, raw_output, color = 'r')
在印刷阶段我做了以下事情:
edges = G.edges()
nodes = G.nodes()
e_colors = [G[u][v]['color'] for u,v in edges]
n_colors = [G[u]['color'] for u in nodes]
nx.draw(G, node_color=n_colors, edge_color=e_colors, with_labels=True)
plt.show()
plt.savefig("filename.png")
如果我只对边缘执行此操作,效果会很好,而如果我按照上面写的那样尝试,我会收到以下消息:
Traceback (most recent call last):
File "result_iterative_parser.py", line 157, in <module>
n_colors = [G[u]['color'] for u in nodes]
File "result_iterative_parser.py", line 157, in <listcomp>
n_colors = [G[u]['color'] for u in nodes]
File "/anaconda3/lib/python3.8/site-packages/networkx/classes/coreviews.py", line 51, in __getitem__
return self._atlas[key]
KeyError: 'color'
有什么想法吗?
而不是:
n_colors = [G[u]['color'] for u in nodes]
你可以这样做:
n_colors = [G.nodes(data='color')[u] for u in nodes]
但下面看起来更清晰:
nodes = G.nodes(data="color")
n_colors = [u[1] for u in nodes]
您可能对 u[1]
感到困惑,但这是因为 G.nodes(data="color")
returns 节点列表作为元组 (node, color)
.
您的解决方案无效,因为 G[u]
returns 节点 u
的边缘(和边缘信息)。相反,您需要的是节点上的信息,因此请使用 .nodes(data=True)
或 .nodes(data='color')
这是每个 returns:
之间的比较
In:
G=nx.Graph()
G.add_node(1, n_color="red")
G.add_node(2, n_color="blue")
G.add_node(3, n_color="green")
G.add_node(4, n_color="red")
G.add_edge(1, 3, e_color="yellow")
G.add_edge(2, 4, e_color="yellow")
G.add_edge(2, 3, e_color="black")
print("G[3] returns\t\t\t ", G[3])
print("G.nodes(data=True)[3] returns\t ", G.nodes(data=True)[3])
print("G.nodes(data='n_color')[3] returns ", G.nodes(data='n_color')[3])
print("G.nodes(data='e_color')[3] returns ", G.nodes(data='e_color')[3])
Out:
G[3] returns {1: {'e_color': 'yellow'}, 2: {'e_color': 'black'}}
G.nodes(data=True)[3]returns {'n_color': 'green'}
G.nodes(data='n_color')[3] returns green
G.nodes(data='e_color')[3] returns None
我正在 python 3.8 上使用 Networkx 创建一个图表,我想在我将节点附加到图表时为每个节点分配一种颜色,如下所示:
if raw_output in occurrencies_dict_gold:
G.add_node(raw_output, color = 'g')
else:
G.add_node(raw_output, color = 'r')
print('RED STATE : ', raw_output)
我在其中检查之前创建的特定字典中是否存在某个节点,因此我添加了该节点及其颜色。
我对边缘做同样的事情
if transition_key in transitions_dict_gold:
G.add_edge(previous_raw_output, raw_output, color = 'g')
else:
G.add_edge(previous_raw_output, raw_output, color = 'r')
在印刷阶段我做了以下事情:
edges = G.edges()
nodes = G.nodes()
e_colors = [G[u][v]['color'] for u,v in edges]
n_colors = [G[u]['color'] for u in nodes]
nx.draw(G, node_color=n_colors, edge_color=e_colors, with_labels=True)
plt.show()
plt.savefig("filename.png")
如果我只对边缘执行此操作,效果会很好,而如果我按照上面写的那样尝试,我会收到以下消息:
Traceback (most recent call last):
File "result_iterative_parser.py", line 157, in <module>
n_colors = [G[u]['color'] for u in nodes]
File "result_iterative_parser.py", line 157, in <listcomp>
n_colors = [G[u]['color'] for u in nodes]
File "/anaconda3/lib/python3.8/site-packages/networkx/classes/coreviews.py", line 51, in __getitem__
return self._atlas[key]
KeyError: 'color'
有什么想法吗?
而不是:
n_colors = [G[u]['color'] for u in nodes]
你可以这样做:
n_colors = [G.nodes(data='color')[u] for u in nodes]
但下面看起来更清晰:
nodes = G.nodes(data="color")
n_colors = [u[1] for u in nodes]
您可能对 u[1]
感到困惑,但这是因为 G.nodes(data="color")
returns 节点列表作为元组 (node, color)
.
您的解决方案无效,因为 G[u]
returns 节点 u
的边缘(和边缘信息)。相反,您需要的是节点上的信息,因此请使用 .nodes(data=True)
或 .nodes(data='color')
这是每个 returns:
In:
G=nx.Graph()
G.add_node(1, n_color="red")
G.add_node(2, n_color="blue")
G.add_node(3, n_color="green")
G.add_node(4, n_color="red")
G.add_edge(1, 3, e_color="yellow")
G.add_edge(2, 4, e_color="yellow")
G.add_edge(2, 3, e_color="black")
print("G[3] returns\t\t\t ", G[3])
print("G.nodes(data=True)[3] returns\t ", G.nodes(data=True)[3])
print("G.nodes(data='n_color')[3] returns ", G.nodes(data='n_color')[3])
print("G.nodes(data='e_color')[3] returns ", G.nodes(data='e_color')[3])
Out:
G[3] returns {1: {'e_color': 'yellow'}, 2: {'e_color': 'black'}}
G.nodes(data=True)[3]returns {'n_color': 'green'}
G.nodes(data='n_color')[3] returns green
G.nodes(data='e_color')[3] returns None