使用networkx绘制带权重有向图时箭头不显示的问题求助
问题解决:NetworkX有向图箭头不显示
问题原因
代码中edge_opt配置里的arrowstyle参数使用了HTML转义字符->,导致箭头样式解析错误,无法正常渲染有向箭头。
修复步骤
- 将
arrowstyle的值从'-|>'改为'-|>'(Python字符串中无需HTML转义,直接使用符号即可) - 保留
arrows=True参数,这是启用有向箭头的核心配置
修改后的完整代码
import networkx as nx import numpy as np import matplotlib.pyplot as plt import pylab plt.rcParams['figure.figsize'] = [10, 10] G = nx.DiGraph() G.add_edges_from([('A', 'B'),('C','D'),('G','D')], weight=1) G.add_edges_from([('D','A'),('D','E'),('B','D'),('D','E')], weight=2) G.add_edges_from([('B','C'),('E','F')], weight=3) G.add_edges_from([('C','F')], weight=4) nodeopt = { 'node_color': 'white', 'node_size': 3500, 'node_shape': 'o', 'linewidths': 1, 'edgecolors' : 'black' } label_opt = { 'font_size': 13, 'font_color' : 'black', } edge_opt = { 'width': 3, 'edge_color' : 'black', 'arrowstyle' : '-|>', # 修正转义问题 'arrows' : True, 'arrowsize' : 12, 'connectionstyle' : 'arc3,rad=0.2' } # 生成边权重标签 edge_labels=dict([((u,v,),d['weight']) for u,v,d in G.edges(data=True)]) # 设置边颜色 red_edges = [] edge_colors = ['black' if not edge in red_edges else 'red' for edge in G.edges()] # 生成节点标签 node_labels = {node:node for node in G.nodes()} pos=nx.spring_layout(G) nx.draw_networkx_nodes(G,pos,**nodeopt) nx.draw_networkx_labels(G, pos, labels=node_labels, **label_opt) nx.draw_networkx_edges(G, pos, **edge_opt) nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels) pylab.show()
效果说明
修改后,所有有向边都会显示正确的箭头,包括C->F这条权重为4的边,箭头会明确指向F节点。
内容的提问来源于stack exchange,提问作者Cindy Burker
相关产品推荐
相关产品推荐

