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

基于Python与Networkx:节点标签与CSV值比对及节点着色需求

解决NetworkX网格图节点颜色匹配CSV值的问题

核心思路

  1. 隐藏边:仅绘制节点和编号,跳过边的绘制步骤
  2. 建立节点与CSV值的映射:将网格图的节点编号(元组或整数格式)转换为CSV的行列索引,匹配对应值后设置差异化颜色

完整可运行代码

import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt

# 创建10x10网格图(节点编号为(行,列)元组,可根据实际节点格式调整)
G = nx.grid_2d_graph(10, 10)

# 读取CSV矩阵,假设无表头,直接为纯矩阵值
df = pd.read_csv('matrix101.csv', header=None)

# 生成节点颜色列表
node_colors = []
for node in G.nodes():
    # 把节点元组转成CSV的行列索引
    row, col = node
    # 如果你的节点是整数编号(比如0-99),替换成下面两行:
    # row = node // 10
    # col = node % 10
    
    # 获取CSV对应位置的值,处理可能的空格
    csv_val = str(df.iloc[row, col]).strip()
    # 根据值设置颜色
    node_colors.append('blue' if csv_val == 'X' else 'red')

# 绘图:只显示节点和编号,隐藏边
plt.figure(figsize=(8, 8))
# 固定布局种子,保证节点位置不变
pos = nx.spring_layout(G, seed=42)
# 绘制节点
nx.draw_networkx_nodes(G, pos=pos, node_color=node_colors, node_size=500)
# 绘制节点编号
nx.draw_networkx_labels(G, pos=pos, font_size=10, font_color='white')
# 关闭坐标轴
plt.axis('off')
plt.show()

关键注意事项

  • 节点编号适配:如果网格图节点不是(行,列)元组而是整数ID,必须将ID转换为CSV的行列索引(比如10x10网格中,ID=23对应行2、列3),否则颜色匹配会出错。
  • CSV读取细节:如果CSV有表头,需添加header=0跳过;如果分隔符是制表符或其他,用sep='\t'指定。
  • 值判断容错:用strip()处理CSV值的空格,避免因空格导致'X'匹配失败。

调试小技巧

  • 先打印G.nodes()确认节点格式,再打印df.iloc[row, col]查看是否能正确获取CSV值,验证映射关系。
  • 如果颜色不对,检查CSV中的X是否为大写,或是否有其他格式问题,可临时打印csv_val排查。

内容的提问来源于stack exchange,提问作者user136819

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:22:52