2016-10-05 3 views
0

Я пытаюсь построить правила ассоциации, и мне трудно найти метки узлов ниже, чтобы «следовать» за узлами. То есть, я бы хотел, чтобы каждая метка автоматически находилась рядом с соответствующим узлом без необходимости жесткого кодирования любых значений. Результат ниже не включает даже некоторые метки узлов. Как я могу эти ярлыки динамически следовать за узлами?Построение графика сетиx: метки узлов рядом с узлами?

import pandas as pd 
import networkx as nx 
import matlotlib.pyplot as plt  

df = pd.DataFrame({'node1': ['candy', 'cookie', 'beach', 'mark', 'black'], 
        'node2': ['beach', 'beach', 'cookie', 'beach', 'mark'], 
        'weight': [10, 5, 3, 4, 20]}) 

G = nx.Graph() 

for idx in df.index: 
    node1 = df.loc[idx, 'node1'] 
    node2 = df.loc[idx, 'node2'] 
    weight = df.loc[idx, 'weight'] 
    G.add_edge(node1, node2, weight = weight) 

nx.draw(G, node_size = 100) 

pos = nx.spring_layout(G) 

nx.draw_networkx_labels(G, pos = pos, font_size = 14, with_labels = True) 

plt.draw() 
plt.show() 

enter image description here

+0

Команда 'networkx'' draw_networkx' позаботится об этом и выполняет то, что делают ваши две команды рисования. 'nx.draw_networkx (G, pos = pos, node_size = 100, font_size = 14, with_labels = True)' Однако метки отображаются точно на вершине узлов. Вам нужно будет изучить, как добавить к ним смещение. – GeckStar

+0

Я уже знаю, как добавить метки на узлы напрямую. Я спрашиваю, как добавить смещение. – blacksite

+0

Команда, которую я опубликовал, по крайней мере, заботится о «динамически следующем» запрошенных вами узлах. Этикетки отображаются сверху каждого узла, а не помещают их далеко от них, как в вашем примере. – GeckStar

ответ

2

Когда вы звоните

nx.draw(G, node_size = 100) 

, а затем

pos = nx.spring_layout(G) 

вы создаете два набора позиций. Решение состоит в том, чтобы сначала получить позиции, а затем использовать их как для узлов, так и для меток.

pos = nx.spring_layout(G) 
nx.draw(G, pos = pos, node_size = 100) 
# do stuff to pos if you want offsets 
nx.draw_networkx_labels(G, pos = pos, font_size = 14, with_labels = True) 

 Смежные вопросы

  • Нет связанных вопросов^_^