Networkx图绘制需求:区分地址节点与充电站节点样式
问题
我用GurobiPy完成路线优化后得到激活弧集合active_arcs,同时有地址节点列表locations和充电站节点列表gas_stations。现在需要用Networkx绘制图,要求:
- 同时出现在
active_arcs和locations中的节点显示为蓝色,标注节点索引; - 同时出现在
active_arcs和gas_stations中的节点显示为绿色,标注“C”(比如示例里的24、26节点)。
我已经写了部分代码,但不知道怎么实现这种样式区分,请求帮助。
相关数据与现有代码片段:
active_arcs=[(0, 2),(0, 4),(0, 11),(1, 24),(2, 7),(3, 1),(4, 5),(5, 3),(6, 0),(7, 6), (8, 14),(9,6),(10, 0),(11, 13),(12, 9),(13, 12),(14, 15),(15, 16),(16, 17),(17, 18), (18, 0),(19, 23),(20, 19),(21, 20),(22, 10),(23, 22),(24, 8),(26, 21)] locations= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] gas_stations = [24,25,26,27] import networkx G = networkx.Graph(active_arcs) labels = dict(zip(G.nodes(), G.nodes())) networkx.draw_networkx(G,labels=labels, width=1, node_size=200, font_size=13, pos=networkx.spring_layout(G))
解决方案
要实现节点样式区分,需分别定义节点颜色和标签,具体步骤如下:
- 提取图中所有活跃节点,避免处理不在图中的节点;
- 遍历节点,根据所属列表分配对应颜色;
- 自定义节点标签,充电站节点替换为“C”,地址节点保留原索引;
- 利用Networkx的参数传入颜色和标签,完成绘制。
完整代码如下:
import networkx import matplotlib.pyplot as plt # 原始数据 active_arcs=[(0, 2),(0, 4),(0, 11),(1, 24),(2, 7),(3, 1),(4, 5),(5, 3),(6, 0),(7, 6), (8, 14),(9,6),(10, 0),(11, 13),(12, 9),(13, 12),(14, 15),(15, 16),(16, 17),(17, 18), (18, 0),(19, 23),(20, 19),(21, 20),(22, 10),(23, 22),(24, 8),(26, 21)] locations= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] gas_stations = [24,25,26,27] # 创建图并获取节点 G = networkx.Graph(active_arcs) nodes = G.nodes() # 定义节点颜色 node_colors = [] for node in nodes: if node in locations: node_colors.append('blue') elif node in gas_stations: node_colors.append('green') else: # 兜底处理既不属于地址也不属于充电站的节点(如示例中的0) node_colors.append('gray') # 定义节点标签 node_labels = {} for node in nodes: node_labels[node] = 'C' if node in gas_stations else str(node) # 提前计算布局,避免多次绘制位置不一致 pos = networkx.spring_layout(G) # 绘制图形 networkx.draw_networkx(G, pos=pos, labels=node_labels, width=1, node_size=200, font_size=13, node_color=node_colors) # 显示图形 plt.show()
代码说明
- 颜色分配:地址节点设为蓝色,充电站节点设为绿色,其他节点设为灰色;
- 标签自定义:充电站节点统一显示“C”,其余节点保留原索引;
- 布局优化:提前计算节点布局,确保绘制时位置稳定;
- 依赖补充:导入
matplotlib.pyplot用于显示绘制后的图形。
内容的提问来源于stack exchange,提问作者chilli93
相关产品推荐
相关产品推荐

