[英]Plot nodes values in Networkx (Python)?
我正在导入一个名为network_nodes
的csv文件
['151753', '111598', '0.211413517594337', '-0.130335792899132']
['151753', '118516', '0.211413517594337', '-0.100253812968731']
前两列表示nodes
,最后两列是与这些节点关联的values
。
例如,这里称为'151753'
的节点连接到名为'111598'
和'118516'
的节点。 并且节点'151753'
与value
'111598'
相关联,而'111598'
与value
-0.130335792899132'相关联。
我想在Networkx中根据节点值使用不同的颜色(或节点大小)绘制此网络(例如,当值非常高时为红色/大,非常低时为蓝色/小)。
我不知道该怎么做。 我知道我应该使用类似的东西
G=nx.read_adjlist('network_nodes.csv', delimiter=',')
nx.draw(G)
但是read_adjlist函数不允许我导入节点值...
您需要编写一些自定义内容来读取您的文件。 这是一种方式:
node,weight,color
1,7.0,r
2,42,g
3,1,b
-
import csv
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
with open('nodelist.txt') as f:
reader = csv.DictReader(f)
for row in reader:
node = int(row.pop('node'))
G.add_node(node, **row)
print G.nodes(data=True)
# [(1, {'color': 'r', 'weight': '7.0'}), (2, {'color': 'g', 'weight': '42'}), (3, {'color': 'b', 'weight': '1'})]
并绘图
nodes = G.nodes()
color = [G.node[n]['color'] for n in nodes]
size = [float(G.node[n]['weight'])*100 for n in nodes]
nx.draw(G, nodes=nodes,node_color=color, node_size=size)
plt.show()
Aric是正确的,你需要编写一些自定义代码,但由于你有一个边列表,而不是一个节点列表,下面的代码将更好地工作。
import csv
import networkx as nx
G = nx.DiGraph()
with open('network_nodes.csv') as f:
node_list = csv.reader(f)
for row in node_list:
G.add_edge(row[0],row[1])
G.node[row[0]]['value'] = float(row[2])
G.node[row[1]]['value'] = float(row[3])
G.nodes(data=True) #print out
打印以下内容:
[('151753', {'value': 0.211413517594337}),
('118516', {'value': -0.100253812968731}),
('111598', {'value': -0.130335792899132})]
您引用的行不是csv文件格式。 假设您更喜欢使用整数和浮点数而不是字符串,这将是正确的csv格式的数据:
151753,111598,0.211413517594337,-0.130335792899132
151753,118516,0.211413517594337,-0.100253812968731
您可以将数据作为列表加载,而不是使用csvreader,或者您可以使用以下sed命令转换文件
sed -i.bak "s/\[\(.*\)\]$/\1/" network_nodes
sed -i.bak "s/'\([0-9\.-]*\)'/\1/g" network_nodes
.bak
文件是可用于回滚sed命令的临时备份文件。 完成后删除它们。 使用csv加载程序加载图形数据应该在执行此操作后成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.