我正在尝试将节点大小设置为等于节点的度数。
我的数据集是
Person1 Age Person2 Wedding
0 Adam John 3 Yao Ming Green
1 Mary Abbey 5 Adam Lebron Green
2 Samuel Bradley 24 Mary Abbey Orange
3 Lucas Barney 12 Julie Lime Yellow
4 Christopher Rice 0.9 Matt Red Green
我建立网络的代码是
pos=nx.spring_layout(G, k=0.20, iterations=30)
nx.draw_networkx_nodes(G, pos, node_size = degrees, nodelist=collist['value'], node_color=collist['Wedding'])
nx.draw_networkx_edges(G, pos, width = [I['Age'] for i in dict(G.edges).values()])
我试图定义程度如下
degrees=[]
for x in df['Person1']: # all nodes size should depend on the degree, so also for Person2. Maybe this step is wrong
deg=G.degree[x]
degrees.append(deg)
但这似乎不是标量。
错误是
ValueError: s must be a scalar, or the same size as x and y
编辑:我忘了举一个例子collist['value']
:
Wedding variable value
0 Green Person1 Adam John
1 Green Person1 Mary Abbey
... ... ... ...
75 Green Person2 Yao Ming
76 Green Person2 Adam Lebron
假设in中的节点G
已从Person1
和中获得Person2
,则in中的“人”的df['Person1']
数量不同于G中或至少in中的节点总数nodelist=collist['value']
。
一个简单的解决方法是考虑的每个节点的度数G
。基本上您是对的,这一步是错误的:
for x in df['Person1']:
您可以将其更改为:
for x in G.nodes():
或使用列表理解:
degrees = [G.degree[node] for node in G.nodes()]
或者,如果您只想要中的节点collist['value']
:
degrees = [G.degree[node] for node in collist['value']]
小例子:
G = nx.barabasi_albert_graph(100, 2, seed=42)
degrees = [G.degree[node] for node in G.nodes()]
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size = degrees)
nx.draw_networkx_edges(G, pos, alpha=0.1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句