Как наметить макет круга в NetworkX с кругами? - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть следующий код для автоматической генерации кругов для каждого созданного мной кругового макета. Второй набор кода - это функция, которую я использую для генерации своих позиций. Раньше я подгонял круги к ним и их r для радиуса, но у меня нет способа определить, какой r должен быть w / r / t 'size' в networkx (кроме добавления вручную коэффициента масштабирования: r_dic [name] = circle_list [ i] [2] * 120000).

Можно ли автоматически создавать круги на заднем плане для каждого регионального кластера узлов без необходимости вручную устанавливать такой коэффициент масштабирования? Networkx, кажется, имеет небольшую овальную форму к своему круговому расположению, поэтому круги, которые я рисую, не захватывают.

enter image description here

plt.figure(figsize=(20,20))

k = 0.8
edge_scalar = 25
node_scalar = 0.5

sizes2 = []
for size in sizes:
  sizes2.append(size*node_scalar)

G2,pos,sizes_G2,node_colors_G2 = add_center_circles(xychange,circle_list,tags_that_exist)

nx.draw_networkx_nodes(G2, pos, with_labels=True, font_size = 18, font_weight = 'bold',node_color=node_colors_G2,node_size=sizes_G2,alpha=0.3)

#Neutral sentiment
for edge in G.edges:
    if (edge not in pos_dic) and (edge not in neg_dic):
        weight = G.get_edge_data(edge[0], edge[1])['weight']*edge_scalar
        nx.draw_networkx_edges(G, final_pos_dic,edgelist=[edge],width=weight, alpha=1, edge_color='grey')

#Positive sentiment
for positive in pos_dic:
    weight = G.get_edge_data(positive[0], positive[1])['weight']*edge_scalar
    nx.draw_networkx_edges(G, final_pos_dic,edgelist=[positive],width=weight, alpha=1, edge_color='g')

#Negative sentiment
for negative in neg_dic:
    weight = G.get_edge_data(negative[0], negative[1])['weight']*edge_scalar
    nx.draw_networkx_edges(G, final_pos_dic,edgelist=[negative],width=weight, alpha=1, edge_color='r')

nx.draw_networkx_nodes(G, final_pos_dic, with_labels=True, font_size = 18, font_weight = 'bold', 
        node_size = sizes2, node_color = node_colors, width = widths)

labels = nx.draw_networkx_labels(G, final_pos_dic,font_size=14, font_color='k', font_family='sans-serif', font_weight='bold',label_pos=3)

plt.title('Diary Network by Fluid Community (Color),\n NLP Object (Cluster), Assortativity = {}'.format(round(assort,2)),size=40)
def add_center_circles(xychange,circle_list,names):
  i = 0
  G2 = nx.Graph()
  pos_dic = {}
  center_dic = {}
  sizes = []
  r_dic = {}
  node_colors = []
  cmap = cm.get_cmap('Set3')

  while i < len(circle_list):
    name = names[i]
    x = circle_list[i][0]+xychange[i][0]
    y = circle_list[i][1]+xychange[i][1]
    r_dic[name] = circle_list[i][2]*120000
    pos_dic[name] = [x,y]
    center_dic[name] = circle_list[i][2]
    node_colors.append(cmap.colors[i])
    i += 1

  G2.add_nodes_from(center_dic)
  for node in G2.nodes:
    sizes.append(r_dic[node])

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