我想要为 networkx 图的节点着色,但我也希望能够强制一组节点为特定颜色,同时仍然能够正确地为图中的所有节点着色。有谁知道如何做到这一点?
可以通过将
color
属性传递给
nx.draw
函数,以将特定节点强制为特定颜色,同时仍然能够正确地为图形中的所有节点着色。
以下是操作步骤:
- 为的节点创建一个颜色列表。 此列表的长度应与图形中的节点数量相同。
- 为要强制使用的特定节点分配所需的顏色。
-
使用
nx.spring_layout()
或nx.circular_layout()
等布局算法计算图形中所有其他节点的位置。 - 为其余节点分配颜色。 可以使用选择的任何颜色方案或算法,例如基于某些节点属性或使用社区检测算法。
-
使用创建的颜色列表将
color
属性传递给nx.draw
函数。
以下是一个示例,说明如何强制某些节点在 NetworkX 图中使用特定颜色:
import networkx as nx
# 创建一个图形
G = nx.Graph()
# 添加一些节点和边
G.add_edges_from(
[
(1, 2),
(1, 3),
(1, 4),
(2, 3),
(3, 4),
(4, 5),
(5, 6),
(5, 7),
(6, 7),
]
)
# 定义要强制使用的节点及其颜色
nodes_to_force = [1, 5]
forced_colors = ["red", "green"]
# 为节点创建一个颜色列表
node_colors = ["blue"] * len(G.nodes())
# 为强制节点分配所需的顏色
for i, node in enumerate(nodes_to_force):
node_colors[node - 1] = forced_colors[i]
# 使用 spring_layout 计算所有节点的位置
pos = nx.spring_layout(G)
# 使用创建的颜色列表绘制图形
nx.draw(G, pos, with_labels=True, node_color=node_colors)
plt.show()
在此示例中,我们首先创建一个包含一些节点和边的图形。然后,我们定义要强制使用的节点及其所需的颜色。接下来,我们创建一个颜色列表,并为所有节点分配默认颜色“蓝色”。然后,我们遍历强制节点列表,并为颜色列表中的相应节点分配所需的颜色。最后,我们使用
nx.draw
函数使用创建的颜色列表绘制图形。
这将创建一个图形,其中节点 1 和 5 分别强制为红色和绿色,而所有其他节点均为蓝色。
这只是一个简单的示例,可以根据自己的需要调整此方法。例如,可以使用不同的颜色方案或算法为其余节点着色,或者可以使用不同的布局算法来定位节点。
标签:python,networkx,graph-coloring From: 78801471