【发布时间】:2014-05-22 22:09:06
【问题描述】:
我在这里只找到了与我想要的类似的东西:
Coloring networkx edges based on weight
但是我似乎无法将此应用于我的问题。我有一个带有加权边的图,但权重不是唯一的(所以有 15 条边的权重为 1)。我想根据边缘的重量为边缘着色,重量越低颜色越浅。
我尝试应用上述问题中建议的方法,但据我了解,这要求权重在每条边上都是唯一的?
到目前为止,我已经按照不同边缘权重的升序制作了一个列表,并希望使用它来对可能的边缘颜色进行分类。我试图避免按重量绘制边缘,因为将来我可能需要绘制一个非常大的图表,边缘上的权重范围很大。
如果不清楚,请在 cmets 中告诉我,我会提供更具体的信息。
谢谢!
编辑: def draw_graph(目标): nlist = [目标]+G.neighbors(目标) H=nx.subgraph(G, nlist) n=H.number_of_edges() 颜色 = 范围(n) 标签,权重 = colour_and_label_edges(H)
pos = nx.spring_layout(H)
nx.draw(H, pos, node_color='#A0CBE2',edge_color=colours, node_size=100, edge_cmap=plt.cm.Blues, width=0.5, with_labels=False)
nx.draw_networkx_edge_labels(H, pos, edge_labels=labels)
plt.savefig("Graphs/edge_colormap_%s.png" % target) # save as png
plt.show() # display
pass
def colour_and_label_edges(graph):
d={}
for (u,v) in graph.edges():
d[u,v]=graph[u][v]['weight']
temp=[]
for val in d.values():
if val not in temp:
temp.append(val)
weights = sorted(temp,key=int)
return d, weights
上面的代码不完整,但想法是函数给了我一个权重列表,如下所示:
[1、2、3、4、5、6、9、10、16、21、47、89、124、134、224]
然后我想使用此列表为每个权重分配一种颜色,权重越高颜色越深。 (相对于数据集,我在此示例中使用了一个非常小的子图)。希望能澄清一点:S
【问题讨论】:
-
networkx 文档中的示例是否有帮助? networkx.github.io/documentation/latest/examples/drawing/…为您尝试的内容发布一些代码将帮助我们找出您需要什么。
-
这实际上是我最初使用的示例。问题是这个例子为地图范围内的 20 个阴影中的每一个边缘着色。我想根据它们的重量为边缘着色。我知道我可以这样做:networkx.github.io/documentation/latest/examples/drawing/… 但我担心这可能需要太长时间/太难实施。我会放一些我正在使用的代码。
标签: python graph matplotlib networkx