Python社区  »  Python

Python networkx图形标签

below_avg_st • 1 周前 • 32 次点击  

我有两个数据帧,用于在Python中创建networkx图形。数据帧df1(节点坐标)和df2(边缘信息)如下所示:

    location     x      y
0   The Wall     145    570
2   White Harbor 140    480

    location    x             y 
56  The Wall    Winterfell    259 
57  Winterfell  White Harbor  247 

这是我实现的尝试绘制图形的代码:

plt.figure()
G=nx.Graph()

for i, x in enumerate(df1['location']):
  G.add_node(x, pos=(df1['x'][i], df1['y'][i]))

for x, x2, w in zip(df2['location'], df2['x'], df2['y']):
  G.add_edge(x, x2, weight=w)

plt.figure(figsize=(15,15)) 

pos = nx.get_node_attributes(G, 'pos')
weights = nx.get_edge_attributes(G, 'weight') 
nx.draw(G, pos=pos, node_size=40, with_labels=True, fontsize=9)
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=weights)

plt.show()

我以前运行过几次,现在看起来很有用,但是在重新打开jupyter笔记本并再次运行之后,它将不起作用。我主要有两大问题。

  • 如果我试着跑这条线 nx.draw(G, pos=pos, node_size=40, with_labels=True, fontsize=9) ,将显示“我的图形”,但不会显示任何标签,即使“u标签”设置为“真”。
  • 其次这条线 nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=weights) 现在告诉我错误 不能用'float'类型的非int乘序列

我已经看了好几个小时了,但我似乎无法修复它,有什么想法吗?


编辑: 如果nx.draw中的exclude pos=pos,我可以显示标签,但如果我包含它,它将不起作用

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52884
 
32 次点击  
分享到微博
文章 [ 1 ]  |  最新文章 1 周前
yatu
Reply   •   1 楼
yatu    11 月前

问题是您没有指定任何 pos 节点的属性 Winterfell ,然后当您尝试访问它时 draw_networkx_edge_labels 它找不到它。

如果尝试给它一个position属性,请说:

      location    x    y
0      TheWall  145  570
1   Winterfell  142  520
2  WhiteHarbor  140  480

然后,可以正确访问所有节点的属性,并核心绘制网络:

plt.figure()
G=nx.Graph()

df1 = df1.reset_index(drop=True)
df2 = df2.reset_index(drop=True)

for i, x in enumerate(df1['location']):
    G.add_node(x, pos=(df1.loc[i,'x'], df1.loc[i,'y']))

for x, x2, w in zip(df2['location'], df2['x'], df2['y']):
    G.add_edge(x, x2, weight=w)

plt.figure(figsize=(15,15)) 

pos = nx.get_node_attributes(G, 'pos')
weights = nx.get_edge_attributes(G, 'weight') 
nx.draw(G, pos=pos, node_size=40, with_labels=True, fontsize=9)
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=weights)

plt.show()

enter image description here