如何在NetworkX绘制的Ego Network(自我中心网络)中添加箭头?
给自我中心网络添加箭头的解决方案
要实现从ego节点指向其邻居的箭头效果,你可以单独绘制ego与邻居间的有向边,具体修改后的代码如下:
import networkx as nx import matplotlib.pyplot as plt # 保留原无向图结构 G = nx.Graph() G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'C'), ('E', 'F'), ('D', 'E'), ('A', 'D'), ('D', 'C'), ('C', 'F'), ('D', 'E')]) ego = 'A' pos = nx.spring_layout(G) # 绘制基础无向图 nx.draw(G, pos, node_color="lavender", node_size=800, with_labels=True) # 突出显示ego节点 options = {"node_size": 1200, "node_color": "r"} nx.draw_networkx_nodes(G, pos, nodelist=[ego], **options) # 提取ego的所有邻居,创建有向边列表 ego_neighbors = list(G.neighbors(ego)) ego_directed_edges = [(ego, neighbor) for neighbor in ego_neighbors] # 绘制从ego指向邻居的有向边,添加箭头 nx.draw_networkx_edges( G, pos, edgelist=ego_directed_edges, arrowstyle='->', # 箭头样式 arrowsize=20, # 箭头大小 edge_color='black', # 边颜色,可根据需求调整 width=1.5 # 边宽度,突出箭头边 ) plt.show()
关键修改说明:
- 保留原无向图的绘制逻辑,确保其他节点间的边仍保持无向样式
- 通过
G.neighbors(ego)获取ego节点的所有直接邻居,生成从ego指向邻居的有向边列表 - 使用
nx.draw_networkx_edges单独绘制这些有向边,通过arrowstyle和arrowsize参数设置箭头的样式与大小,同时调整边宽让箭头更显眼
内容的提问来源于stack exchange,提问作者Soumya Mondal
相关产品推荐
相关产品推荐

