NetworkX 显示错误的颜色

问题描述

我正在尝试使用颜色用 networkx 绘制一个简单的网络,但是我给节点的颜色没有显示在图表上...

import networkx as nx
G = nx.Graph()

G.add_nodes_from([
    (4,{"color": "red"}),(5,{"color": "green"}),])

nx.draw_networkx(G)

绘制此图:

enter image description here

为什么这些节点不是我给它们分配的颜色?


我正在尝试从 https://networkx.org/documentation/stable/tutorial.html

复制示例

解决方法

文档中的示例具有误导性 - 它甚至不显示带有颜色的图像。

{"color": "red"} 不用于更改颜色,而是仅在节点中保留额外信息。您可以使用 {"first name": "James","last name": "Bond","number": "007"} 获得相同的结果

要设置颜色,您必须在绘制它们时使用列表

nx.draw(G,node_color=['red','green','blue'],with_labels=True)

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()

G.add_nodes_from([
    (4,{"color": "red"}),(5,{"color": "green"}),(7,{"first name": "James","number": "007"}),])

nx.draw(G,with_labels=True)
plt.show()

或者您将不得不使用 for-loop 使用来自节点的数据创建列表

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()

G.add_nodes_from([
    1,2,(4,8,9,('Hello',])

#color_map = ['red','blue']
color_map = []

for node in G:
    print(G.nodes[node])
    if 'color' in G.nodes[node]:
        color_map.append( G.nodes[node]['color'] )
    else: 
        color_map.append('blue')    
    
nx.draw(G,node_color=color_map,with_labels=True)
plt.show()

enter image description here

,

试试:

import networkx as nx
G = nx.Graph()

G.add_nodes_from([
    (4,])

nx.draw_networkx(G,node_color=[i['color'] for i in dict(G.nodes(data=True)).values()])

输出:

enter image description here