节点颜色 Networkx Python 3.8

Posted

技术标签:

【中文标题】节点颜色 Networkx Python 3.8【英文标题】:Node color Networkx Python 3.8 【发布时间】:2021-04-30 03:27:20 【问题描述】:

我正在 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'

有什么想法吗?

【问题讨论】:

【参考方案1】:

代替:

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") 以元组(node, color) 的形式返回节点列表。


您的解决方案不起作用,因为 G[u] 返回节点 u 的边(和边信息)。相反,您需要的是节点上的信息,因此请使用 .nodes(data=True).nodes(data='color') 这是每个返回的比较:

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

【讨论】:

以上是关于节点颜色 Networkx Python 3.8的主要内容,如果未能解决你的问题,请参考以下文章

节点的 Networkx 和 matplotlib 颜色图;不同网络的相同地图

Pygraphviz / networkx 设置节点级别或层

networkx有向图或二叉树的root根节点,Python

networkx有向图或二叉树的root根节点,Python

Python:获取所有节点的度数,然后在networkx中绘制箱线图

python networkx 在某些条件下删除节点和边