微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 networkx 具有特定属性的有向图

如何解决使用 networkx 具有特定属性的有向图

我正在使用具有此数据样本的 networkx 构建网络

     Node1 Target1 Edge_Attr    Label
0       A   C   59.5    0
1       A   F   47.0    0
2       A   X   43.8    0
3       A   D   39.4    0
4       A   M   39.3    0
5       B   C   27.5    1
6       B   F   15.2    1
7       B   H   11.4    1
8       C   N   10.8    1
9       C   M   7.2     1

代码

G = nx.from_pandas_edgelist(df,source='Node1',target='Target1',edge_attr='Edge_Attr') 

degrees=[]
for x in G.nodes():
    deg=G.degree[x]  
    degrees.append(deg)
    
collist = df.melt('Label').dropna()

degrees=[G.degree[node] for node in collist['value']]

nx.draw_networkx_nodes(G,pos,nodelist=collist['value'],node_size = degrees,node_color=collist['Label'])
nx.draw_networkx_edges(G,width = [i['Weight'] for i in dict(G.edges).values()])

预期的输出

  • 边缘从 Node1Target1 的有向网络
  • 节点的大小由其入度给出
  • Edge_Attr给出的边缘属性(大小?)
  • 节点的颜色由 Label 给出(如果为 1,则为红色,否则为绿色)

当我尝试绘制网络时,收到此错误消息:

---> 21 degrees=[G.degree[node] for node in collist['value']]
     22 

<ipython-input-15-ffc9ad2a87a1> in <listcomp>(.0)
---> 21 degrees=[G.degree[node] for node in collist['value']]
     22 

~/opt/anaconda3/lib/python3.8/site-packages/networkx/classes/reportviews.py in __getitem__(self,n)
    445     def __getitem__(self,n):
    446         weight = self._weight
--> 447         nbrs = self._succ[n]
    448         if weight is None:
    449             return len(nbrs) + (n in nbrs)

KeyError: 0

<figure size 2880x1440 with 0 Axes>

有谁知道如何修复错误/获得预期的输出?我一直在为 Label 字段使用 collist,但我想我以错误的方式使用它(或者只是在我的情况下不需要)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。