Python 节点大小取决于度

Python 节点大小取决于度,python,pandas,networkx,Python,Pandas,Networkx,我正在尝试将节点大小设置为节点的度数 我的数据集是 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

我正在尝试将节点大小设置为节点的度数

我的数据集是

    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
degrees = [G.degree[node] for node in collist['value']]

假设
G
中的节点是从列
Person1
Person2
中获得的,则
df['Person1']
中的“人”数不同于G中的节点总数,或者至少不同于
nodelist=collist['value']
中的节点数

一个简单的解决方案是考虑<代码> g < /COD>中的每个节点的程度。基本上你是对的,这一步是错的:

for x in df['Person1']:
您可以将其更改为:

for x in G.nodes():
使用:

或者,如果您只想在
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
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)
结果:

谢谢你的帮助。然而,我仍然得到相同的错误。我忘了解释
collist['value']
的样子。这可能是问题的原因。请不要使用
G.nodes()
try
collist['value']
谢谢。它现在可以正常工作,没有错误。您可以尝试将度乘以某个值:例如:
degrees=[1.2*G.degree[node],对于collist['value']]中的节点,
将使节点大小增加20%