You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))
解决方案

要实现节点样式区分,需分别定义节点颜色和标签,具体步骤如下:

  1. 提取图中所有活跃节点,避免处理不在图中的节点;
  2. 遍历节点,根据所属列表分配对应颜色;
  3. 自定义节点标签,充电站节点替换为“C”,地址节点保留原索引;
  4. 利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:15:41