Как создать граф Networkx со случайно назначенными метками узлов? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть график с одной переменной label, которая принимает 2 значения. Каждый узел на графике помечен как «красный» или «синий». Я хотел бы создать 100 новых графиков, в которых структура (ie. Размещение узлов и ребер) остается одинаковой, но метки узлов назначаются случайным образом, так что в каждом из них одинаковое количество «красных» и «синих» узлов. граф. Я знаю, что термин «случайный» здесь не подходит, но я не уверен, как еще его описать.

1 Ответ

0 голосов
/ 06 марта 2020

Для «случайной» маркировки здесь вам просто нужно назначить метки, которые вы добавляете на график, случайным образом каждый раз, как показано ниже:

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)

В коде предполагается, что график имеет четное количество узлов, так что там может быть «одинаковое количество« красных »(« R ») и« синих »(« B ») узлов.

Для маркировки: al oop перебирает все узлы и затем случайным образом выбирает между красным или синим, пока половина узлов не будет присвоена либо красному, либо синему. Затем он просто назначит всем остальным другой цвет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...