Graphviz 网格对齐

Posted

技术标签:

【中文标题】Graphviz 网格对齐【英文标题】:Graphviz grid alignment 【发布时间】:2011-10-30 04:09:47 【问题描述】:

我正在尝试为所有元素都必须以网格布局的图形生成布局信息。我希望所有坐标都是网格框大小的整数倍。

例如,如果我有一个由 1 英寸正方形组成的网格,我希望所有节点坐标都是 72 的倍数(如果我没记错的话,一英寸的点数)。我喜欢 dot 的层次结构,所以如果可能的话,这就是我想使用的工具。

我已经多次查看element attribute list,但我还没弄清楚如何做到这一点。

编辑:

我选择 GraphViz 的原因是它可以执行布局,然后将该信息作为文本返回。其他工具好像只是想渲染一张图,但我想在别处渲染,只需要获取布局信息即可。

【问题讨论】:

【参考方案1】:

我相信 Graph::Easy perl 模块可用于将点文件布局为网格。

http://bloodgate.com/perl/graph/manual/index.html

http://search.cpan.org/~tels/Graph-Easy/bin/graph-easy

编辑:

我不确定这是否是您想要的输出,但是通过使用我可以生成的节点的列宽:

+------------------+
|        A         |
+------------------+
  |             |
  |             |
  v             v
+------------++----+
|     A1     || A2 |
+------------++----+
  |      |
  |      |
  v      v
+-----++-----+
| A1B || A1A |
+-----++-----+

graph  flow: down; 
[ A ] columns: 8;
[ A ]  ->  start: south; end: north;  [ A1 ] 
[ A ]  ->  start: south; end: north;  [ A2 ] 
[ A1 ] ->  start: south; end: north;  [ A1A ]
[ A1 ] ->  start: south; end: north;  [ A1B ]

我也相信可以在网格上设置节点所在的确切空间。

【讨论】:

我查看了 Graph::Easy,但它似乎无法进行我需要的分层布局。我正在布置一个 DAG,我希望子节点严格低于其父节点。 事实证明 Graph::Easy 并不足以满足我的需求。您的技巧适用于小图,但一旦它们变得更大,它就会停止工作。

以上是关于Graphviz 网格对齐的主要内容,如果未能解决你的问题,请参考以下文章

使用graphviz绘制双向链表

graphviz dot:文本(标签)使用与箭头(边缘)相同的角度,而不是默认的水平

Anaconda安装Graphviz, mac下Graphviz安装, pcharm中调用pycharm, Graphviz典型例子

安装graphviz,没有名为graphviz的模块

未找到 GraphViz 的可执行文件 - 为啥通过 pip 安装 graphViz 后没有安装可执行文件?

没有名为 _graphviz 的模块