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