Отображение кругов переменного размера поверх узлов в NetworkX

#python #matplotlib #networkx

#python #matplotlib #networkx

Вопрос:

У меня есть взвешенный график networkx. Я вычислил значения центральности собственного вектора на графике; однако я хотел также добавить круги поверх каждого узла, которые визуально представляют значение собственного вектора конкретного узла. Круги будут отличаться по размеру в зависимости от значения собственного вектора соответствующего узла. (чем больше значение, тем больше круг на вершине узла).

Я использую следующий код:

 import networkx as nx

# Create a random graph
G = nx.gnp_random_graph(20, 0.2)

# Calculate centrality
centrality = nx.eigenvector_centrality_numpy(G)

# Create labels dict with fixed digit format
labels = {
    node: '{:.3f}'.format(centrality[node])
    for node in centrality
}

# Draw the graph with labels
nx.draw(
    G,
    with_labels=True,
    labels=labels,
    node_color='#FF0000'
)
  

Ответ №1:

Вы можете получить то, что хотите, как с matplotlib.pyplot.text matplotlib.pyplot.Circle помощью, так и. Возможно, вам захочется немного изменить настройки, но, надеюсь, это послужит хорошей отправной точкой:

 import networkx as nx

# Create a random graph
G = nx.gnp_random_graph(20, 0.2)

# Calculate centrality
centrality = nx.eigenvector_centrality_numpy(G)

# Create labels dict with fixed digit format
labels = {
    node: '{:.3f}'.format(centrality[node])
    for node in centrality
}

plt.figure(figsize=(20,20))
ax = plt.gca()
ax.set_aspect('equal')

pos = nx.spring_layout(G)
nx.draw(G, 
        pos=pos,
        node_color='lightblue', 
        labels=labels,
        with_labels=True)

for node, (x,y) in pos.items():
    rad = centrality[node]*0.16
    circle = plt.Circle((x,y rad), radius=rad, color='orange')
    plt.text(x-.012, y rad, node, fontsize=16, weight="bold")
    ax.add_artist(circle)
    
plt.show()
  

введите описание изображения здесь