未知节点坐标时可将图绘制到网格的算法、软件或库有哪些?
网格图绘制可行方案
1. Graphviz 约束布局
无需预先指定所有节点坐标,仅通过简单规则约束即可自动生成网格对齐的布局:
- 解析你的输入文件提取边和距离/方位规则,使用pygraphviz调用
neato布局引擎 - 对带
distance属性的边,设置边的len属性为对应距离值,开启全局参数mode=ipsep强制边长按设定值对齐 - 对
loc-前缀的节点,按照方位规则给对应边添加权重约束:右侧连接的边设置dir=right weight=20,上方连接的边设置dir=up weight=20,引擎会自动推导所有节点的网格坐标 - 示例代码:
import pygraphviz as pgv # 初始化图,开启网格对齐模式 G = pgv.AGraph(directed=False, layout="neato", args="-Gmode=ipsep -Gnodesep=1") # 解析输入添加边示例 G.add_edge("n6", "n0", len=1) G.add_edge("loc-1", "loc-2", dir="right", weight=20) G.add_edge("loc-1", "loc-17", dir="up", weight=20) # 导出图片 G.draw("grid_graph.png")
2. Networkx 自定义BFS布局生成
不到20行代码即可实现完全符合要求的网格布局,不需要依赖第三方布局引擎:
- 提取所有节点和边的关系,记录每个节点对应的相邻节点方位规则
- 选最小ID的节点作为起始点,坐标初始化为(0,0)
- BFS遍历所有节点,访问子节点时按照方位规则直接计算其坐标:右侧x+1、上方y+1、左侧x-1、下方y-1
- 遍历完成后得到所有节点的坐标字典,直接传入
networkx.draw()的pos参数即可绘制
3. TikZ 网格图扩展
如果需要出版级矢量输出,可以使用LaTeX TikZ包的graphs.grid扩展,仅输入边关系和方位约束即可自动生成网格对齐的图。
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

