Networkx График веса узла графика - PullRequest
0 голосов
/ 24 мая 2019

Я хотел бы назначить веса узлов для каждого узла в неориентированном графе.Я использую следующее MWE:

import sys
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(0)
G.add_node(1, weight=2)
G.add_node(2, weight=3)
nx.draw(G, with_labels=True)
plt.show()

Тогда у меня есть фигура следующего вида: enter image description here

Я хотел бы построить график с весамизадается новым цветом рядом с узлами, например: enter image description here

Какой самый простой способ реализовать это?В SO материалы в основном рассчитаны на веса ребер или на изменение размеров узлов по отношению к весам узлов.

1 Ответ

1 голос
/ 24 мая 2019

Вы можете использовать атрибут labels с соответствующим dict и атрибут node_color с соответствующим списком. Для этого кода:

G = nx.Graph()
G.add_node(0, weight=8)
G.add_node(1, weight=5)
G.add_node(2, weight=3)
labels = {n: G.nodes[n]['weight'] for n in G.nodes}
colors = [G.nodes[n]['weight'] for n in G.nodes]
nx.draw(G, with_labels=True, labels=labels, node_color=colors)

Networkx нарисует:

enter image description here

Если вы хотите нарисовать как идентификатор узла, так и его вес, вы можете написать что-то вроде этого:

labels = {n: str(n) + '; ' + str(G.nodes[n]['weight']) for n in G.nodes}


Если у вас отсутствуют атрибуты weight в узлах и вы хотите их нарисовать, вы можете использовать этот код:

labels = {
    n: str(n) + '\nweight=' + str(G.nodes[n]['weight']) if 'weight' in G.nodes[n] else str(n)
    for n in G.nodes
}

Я думаю, что почти невозможно нарисовать веса около узлов с разным цветом. Это лучшее, что я могу вам предложить.

...