使用Networkx和Matplotlib绘制关系图时出现TypeError如何解决
错误原因
- 你预处理得到的
edges列表中每个元素已经是(源节点ID, 目标节点ID)的二元组,不是字典结构,因此不能使用edge['source']这种字典取值语法,这是触发报错的直接原因。 add_edges_from方法本身支持直接传入边列表批量添加,不需要循环单条边处理;如果要循环添加单条边,应该使用add_edge方法。- 节点标签绘制的参数传入错误,
nx.draw_networkx_labels需要传入布局位置参数pos,且ID到名称的映射要通过labels参数传递,不需要循环遍历节点。
修改后可运行的完整绘图代码
import networkx as nx import matplotlib.pyplot as plt G = nx.DiGraph() # 批量添加所有边,无需循环 G.add_edges_from(edges) # 加seed参数保证每次运行布局一致,可自行调整 pos = nx.spring_layout(G, seed=42) # 绘制节点 nx.draw_networkx_nodes(G, pos, node_size = 1000, node_color='lightblue') # 绘制有向边,增加箭头样式优化显示效果 nx.draw_networkx_edges(G, pos, edgelist = G.edges(), edge_color = 'red', arrowstyle='->', arrowsize=20) # 直接传入节点ID到名称的映射字典绘制标签 nx.draw_networkx_labels(G, pos, labels=nodes, font_size=10) # 隐藏坐标轴 plt.axis('off') plt.show()
内容的提问来源于stack exchange,提问作者cazmilla azaf
相关产品推荐
相关产品推荐

