繁体   English   中英

在Networkx(Python)中绘制节点值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM