gpt4 book ai didi

networkx - 根据厚度在networkx中绘制大型加权网络?

转载 作者:行者123 更新时间:2023-12-04 22:20:53 25 4
gpt4 key购买 nike

如何按厚度在networkx中绘制N> 1000个节点的加权网络?如果我有一个源、目标节点和每个边的权重的 .csv 列表,我正在考虑使用该方法:

for i in range(N)
G.add_edge(source[i],target[i], weight=weight[i])
nx.draw_networkx_edges(G)

但是,我是否必须为每个边缘赋予厚度?或每组具有相似厚度的边缘?

最佳答案

您可以单独指定每条边,或者如果您有一些函数来计算分组(然后使用多次调用 draw_network_edges ),则可以将它们定义为组。

这是一个随机图的例子,它按原样使用边缘权重,首先定义边缘厚度,然后使用数据作为着色。

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np

n = 15; m = 40

# select some edge destinations
L = np.random.choice(xrange(n), 2*m)
# and suppose that each edge has a weight
weights = 0.5 + 5 * np.random.rand(m)

# create a graph object, add n nodes to it, and the edges
G = nx.DiGraph()
G.add_nodes_from(xrange(n))
for i, (fr, to) in enumerate(zip(L[1::2], L[::2])):
G.add_edge(fr, to, weight=weights[i])

# use one of the edge properties to control line thickness
edgewidth = [ d['weight'] for (u,v,d) in G.edges(data=True)]

# layout
pos = nx.spring_layout(G, iterations=50)
#pos = nx.random_layout(G)

# rendering
plt.figure(1)
plt.subplot(211); plt.axis('off')
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_edges(G, pos, width=edgewidth,)

plt.subplot(212); plt.axis('off')

# rendering
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_edges(G, pos, edge_color=edgewidth)

plt.show()

这给了你这样的东西:

显然,您也可以使用更复杂的函数来组合适合您的应用程序的边宽值列表(例如分箱值或不同属性的乘积)。

关于networkx - 根据厚度在networkx中绘制大型加权网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com