Networkx: как рисовать цветные края? - PullRequest
5 голосов
/ 17 октября 2010

Я построил график, используя следующий код:

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()

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

Ответы [ 3 ]

6 голосов
/ 14 мая 2013

Вы можете сделать это без рисования краев в цикле. Это будет быстрее для больших графиков.

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()
1 голос
/ 17 октября 2010

Хм, наконец-то нашел то, что мне нужно было сделать. Цвета, очевидно, должны быть разделены, а сеть должна быть нарисована с помощью 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")
0 голосов
/ 13 мая 2013

Строка документации показывает:

edge_color: цветная строка или массив значений с плавающей точкой Edge color.Может быть единственной строкой формата цвета (по умолчанию = 'r') или последовательностью цветов той же длины, что и список краев.Если заданы числовые значения, они будут отображены в цвета с использованием параметров edge_cmap и edge_vmin, edge_vmax.

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