【问题标题】:Node color Networkx Python 3.8节点颜色 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'

有什么想法吗?

【问题讨论】:

    标签: python colors nodes networkx


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2023-04-07
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多