【问题标题】:How to create Networkx graph with randomly assigned node labels?如何使用随机分配的节点标签创建 Networkx 图?
【发布时间】:2026-02-06 11:50:01
【问题描述】:

我有一个带有单个标签变量的图表,它需要 2 个值。图中的每个节点都标记为“红色”或“蓝色”。我想生成 100 个新图,其中结构(即节点和边缘位置)保持不变,但节点标签是随机分配的,因此每个图中的“红色”和“蓝色”节点数量相同。我知道“随机”一词在这里不合适,但我不确定如何描述它。

【问题讨论】:

  • 你能举一个你目前正在使用的代码的例子吗?
  • 你的问题是分配部分还是随机选择部分?

标签: python networkx


【解决方案1】:

对于此处的“随机”标签,您只需像这样每次随机分配要添加到图表中的标签:

import random 
import networkx as nx

G=nx.Graph()
for x in range(6):
  G.add_node(x)

for x in range(6):
  for y in range(6):
    G.add_edge(x,y)

pos=nx.spring_layout(G) 

nx.draw_networkx_nodes(G,pos,
                       nodelist=[x for x in range(6)],
                       node_color='r',
                       node_size=500,
                   alpha=0.8)

nx.draw_networkx_edges(G,pos,
                       edgelist=[(x,y) for x in range(6) for y in range(6)],
                       width=4,alpha=0.5,edge_color='b')

labels={}
# Iterate through all nodes
for x in range(len(G.nodes())):
  # Label node as either B or R until half of the nodes are labeled as either
  if(list(labels.values()).count('R') == len(G.nodes())/2):
    labels[x] = 'B'
  if(list(labels.values()).count('B') == len(G.nodes())/2):
    labels[x] = 'R'
  else:
    labels[x] = random.choice(['B', 'R'])


nx.draw_networkx_labels(G,pos,labels,font_size=16)

在代码中假设 Graph 有偶数个节点,所以“红色”('R') 和“蓝色”('B') 节点的数量可以相同。

对于标签,循环遍历所有节点,然后在红色或蓝色之间随机选择,直到一半的节点被分配为红色或蓝色。然后它只是为所有其他人分配另一种颜色。

【讨论】: