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

最简邻接矩阵渲染方法咨询:特定字典格式输入的图形化需求

最简渲染邻接表(字典格式)的方案

好问题!针对你这种用字典存储节点邻接关系、配合单元格对象字典的场景,NetworkX + Matplotlib绝对是最简的实现方案——不用自己从零造渲染轮子,几行代码就能生成带标签的可视化图形,还能灵活调整样式适配迷宫场景。

步骤1:安装依赖

如果还没装这两个工具库,先执行以下命令:

pip install networkx matplotlib

步骤2:核心代码实现

先模拟你的输入数据(贴合迷宫场景):

# 邻接表:键是节点ID,值是相邻节点的集合
adjacency_dict = {
    0: {1, 4},
    1: {0, 2, 5},
    2: {1, 3, 6},
    3: {2, 7},
    4: {0, 5, 8},
    5: {1, 4, 6, 9},
    6: {2, 5, 7, 10},
    7: {3, 6, 11},
    8: {4, 9},
    9: {5, 8, 10},
    10: {6, 9, 11},
    11: {7, 10}
}

# 单元格字典:键是节点ID,值是迷宫单元格对象(模拟带坐标、标签的结构)
class MazeCell:
    def __init__(self, x, y, label):
        self.x = x
        self.y = y
        self.label = label

cell_dict = {
    0: MazeCell(0, 0, "A"),
    1: MazeCell(1, 0, "B"),
    2: MazeCell(2, 0, "C"),
    3: MazeCell(3, 0, "D"),
    4: MazeCell(0, 1, "E"),
    5: MazeCell(1, 1, "F"),
    6: MazeCell(2, 1, "G"),
    7: MazeCell(3, 1, "H"),
    8: MazeCell(0, 2, "I"),
    9: MazeCell(1, 2, "J"),
    10: MazeCell(2, 2, "K"),
    11: MazeCell(3, 2, "L")
}

接下来是可视化核心代码:

import networkx as nx
import matplotlib.pyplot as plt

# 1. 创建NetworkX图对象
G = nx.Graph()

# 2. 批量添加节点和边
G.add_nodes_from(adjacency_dict.keys())
for node, neighbors in adjacency_dict.items():
    G.add_edges_from((node, neighbor) for neighbor in neighbors)

# 3. 准备节点标签:用单元格对象的自定义属性(这里用label,也可以换成节点ID或其他属性)
node_labels = {node: cell_dict[node].label for node in G.nodes()}

# 4. 适配迷宫的规整布局:用单元格的坐标作为节点位置(反转y轴是因为Matplotlib默认y轴向上,符合迷宫视觉习惯)
node_positions = {node: (cell_dict[node].x, -cell_dict[node].y) for node in G.nodes()}

# 5. 绘制图形
plt.figure(figsize=(8, 6))
# 画节点(自定义大小和颜色)
nx.draw_networkx_nodes(G, node_positions, node_size=700, node_color="#a8d1ff")
# 画边(自定义颜色)
nx.draw_networkx_edges(G, node_positions, edge_color="#333333")
# 画标签(自定义字体)
nx.draw_networkx_labels(G, node_positions, node_labels, font_size=12, font_weight="bold")

# 隐藏坐标轴,让图形更干净
plt.axis("off")
plt.tight_layout()
# 显示图形(要导出图片的话,换成plt.savefig("maze_graph.png")即可)
plt.show()

关键细节调整

  • 如果你的单元格没有坐标,NetworkX默认会用弹簧布局(nx.spring_layout(G))自动调整节点位置,也能清晰展示连接关系,只是不会像迷宫网格那样规整。
  • 可以自由自定义样式:比如给起点/终点设置特殊颜色、调整节点大小、修改边的粗细等,适配你的可视化需求。
  • 要是不需要类对象,直接用单元格的属性字典也完全可行,只要把cell_dict[node].label换成对应的字典取值即可。

备选方案(非Python场景)

如果偏好JavaScript,可以用d3.js实现,但需要先把字典转成JSON格式,再写渲染逻辑,复杂度比Python方案高不少。所以对于快速实现需求,NetworkX+Matplotlib的组合绝对是最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:42:29