2
我試圖讓顯卡在networkx其中節點組鏈接爲在此圖:如何應對networkx圖形重疊節點
然而,一些節點顯示出來的其他人以中性色彩呈現。
我想知道是否有一種方法要麼:
- 顏色只爲每個子組(例如,一個用紅色節點)一個節點 - 其他與中性色;
- 或爲所有節點着色。
這是我的代碼:
def draw_graph(transactions, method, suffix):
G = nx.Graph()
# get the string prefixes for each group (column of nodes)
# possible prefixes are: aa, bb, cc, etc.
prefixes = [c[:2] for c in classifiers]
# for each transaction, use also a unique index (i_t)
for i_t, t in enumerate(transactions):
# tid is the groups signature, e.g. if the tuple of
# classification is ('1', '2', '1') tid is 121
# tid has always 3 characters - there are only 3
# with at maximum 7 classifications in each group
tid = ''.join([c[2] for c in t])
# nodes have name the concatenated string composed of:
# * classification (e.g. aa1) <- please note prefix
# * tid (e.g. 121)
# * unique identifier
node1 = t[0] + tid + str(i_t)
node2 = t[1] + tid + str(i_t)
node3 = t[2] + tid + str(i_t)
# link correspondent nodes on each group
G.add_edge(node1, node2, weight=0.2)
G.add_edge(node2, node3, weight=0.2)
# based on prefix decide in which group store the node
pos = {}
group1 = []
group2 = []
group3 = []
for node in G.nodes():
if node.startswith(prefixes[0]):
group1.append(node)
elif node.startswith(prefixes[1]):
group2.append(node)
else:
group3.append(node)
# sort each group by classification AND tid
group1.sort(key=lambda x: x[2:6])
group2.sort(key=lambda x: x[2:6])
group3.sort(key=lambda x: x[2:6])
# define position for each node based on group and index
# of node inside the group
for i_group, group in enumerate([group1, group2, group3]):
for i_node, node in enumerate(group):
xpos = float(i_group) * 2
ypos = float(i_node)/len(group)
pos[node] = [xpos, ypos]
# decide node color based on classification (nn[2]).
# avail_colors is a list of colors defined outside this method
node_color = [avail_colors[int(nn[2])] for nn in G.nodes()]
# draw each node with correspondent position and color
nx.draw_networkx_nodes(G, pos, node_size=200, node_color=node_color)
# draw edges with defined weight (not used in this example)
for (u, v, d) in G.edges(data=True):
w = d['weight']
nx.draw_networkx_edges(G, pos, edgelist=[(u, v)], width=w)
plt.axis('off')
plt.close()
希望這是可以理解的。如果不問我信息。
謝謝
有兩種節點着色需求的方法。你可以發佈一個小代碼,顯示你是如何做到這一點的?然後,我們可以就如何修改它來做你想做的事情提出建議。 – Aric
對不起。我忘了發佈它。我儘快發佈。 – gc5
@Aric發佈。謝謝 – gc5