簡體   English   中英

Networkx:如何繪制彩色邊緣?

[英]Networkx: how to draw coloured edges?

我使用以下代碼構建了一個圖表:

G = networkx.Graph()
G.add_edges_from([list(e) for e in P + Q + R])    
colors = "bgrcmyk"
color_map = [colors[i] for i in range(n/2)]

# add colors
for i in range(len(P)):
    edge = list(P[i])
    G[edge[0]][edge[1]]['edge_color'] = color_map[i]

for i in range(len(P)):
    edge = list(Q[perms[0][i]])
    G[edge[0]][edge[1]]["color"] = color_map[perms[0][i]]

for i in range(len(P)):
    edge = list(R[perms[1][i]])
    G[edge[0]][edge[1]]["color"] = color_map[perms[1][i]]

然后我使用以下方式顯示:

networkx.draw(G)
matplotlib.pyplot.show()

它顯示正常,除了所有邊緣都是黑色而不是我試圖在上面的代碼段中分配的顏色。 有任何想法嗎?

您可以在不循環繪制邊緣的情況下執行此操作。 對於較大的圖形,它會更快。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
# example graph 
for color in "bgrcmyk":
    G.add_edge('s'+color,'t'+color, color=color)

# edge_color_attr = nx.get_edge_attributes(G,'color')
# edges = edge_color_attr.keys()
# colors = edge_color_attr.values()
edges,colors = zip(*nx.get_edge_attributes(G,'color').items())
nx.draw(G,edgelist=edges,edge_color=colors,width=10)
plt.show()

嗯,終於找到了我需要做的事情。 顯然需要分離顏色,需要使用draw_networkx繪制網絡。 所以上面三個for循環將替換為:

pos=networkx.spring_layout(G)
for i in range(len(P)):
    networkx.draw_networkx_edges(G,pos,
                edgelist=[list(P[i]), list(Q[perms[0][i]]), list(R[perms[1][i]])],edge_color=color_map[i], width="8")

文檔字符串顯示:

edge_color:顏色字符串或浮點數組邊緣顏色。 可以是單個顏色格式字符串(默認='r'),也可以是與edgelist長度相同的顏色序列。 如果指定了數值,則使用edge_cmap和edge_vmin,edge_vmax參數將它們映射到顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM