Dot语言中rankdir=LR不生效,如何实现预期横向布局?
解决Graphviz设置
rankdir=LR后仍生成纵向布局的问题 问题描述
我编写了如下Dot代码:
digraph FST { rankdir = "LR"; size = "8.5,11"; label = ""; center = 1; orientation = Landscape; ranksep = "0.4"; nodesep = "0.25"; 0 [label = "0", shape = circle, style = bold, fontsize = 14] 0 -> 1 [label = "<eps>:<eps>/0.69315", fontsize = 14]; 0 -> 2 [label = "<eps>:<eps>/0.69315", fontsize = 14]; 1 [label = "1", shape = doublecircle, style = solid, fontsize = 14] 1 -> 3 [label = "ae1:abbey", fontsize = 14]; 1 -> 5 [label = "b:bare", fontsize = 14]; 1 -> 1 [label = "sil:'SIL/0.69315", fontsize = 14]; 1 -> 2 [label = "sil:'SIL/0.69315", fontsize = 14]; 2 [label = "2", shape = circle, style = solid, fontsize = 14] 2 -> 1 [label = "sil:<eps>", fontsize = 14]; 3 [label = "3", shape = circle, style = solid, fontsize = 14] 3 -> 4 [label = "b:<eps>", fontsize = 14]; 4 [label = "4", shape = circle, style = solid, fontsize = 14] 4 -> 1 [label = "iy0:<eps>/0.69315", fontsize = 14]; 4 -> 2 [label = "iy0:<eps>/0.69315", fontsize = 14]; 5 [label = "5", shape = circle, style = solid, fontsize = 14] 5 -> 6 [label = "eh1:<eps>", fontsize = 14]; 6 [label = "6", shape = circle, style = solid, fontsize = 14] 6 -> 1 [label = "r:<eps>/0.69315", fontsize = 14]; 6 -> 2 [label = "r:<eps>/0.69315", fontsize = 14]; }
使用命令cat a.dot | dot -Tsvg > a.svg转换时,明明设置了rankdir = "LR",却始终生成纵向布局的SVG。尝试过重装conda版Graphviz 7.1.0、yum安装失败、更换其他rankdir参数、转换多种格式,均未解决问题。
解决方法
1. 删除orientation = Landscape参数
orientation是针对打印页面的布局属性,和rankdir存在冲突,尤其是在生成SVG时。直接删除这一行后重新生成:
dot -Tsvg a.dot > a.svg
2. 调整或移除size参数
size = "8.5,11"是纵向信纸尺寸,会限制横向布局的空间。可以改为横向尺寸size = "11,8.5",或者直接删除该参数让Graphviz自动适配:
digraph FST { rankdir = "LR"; // 注释或删除size参数 label = ""; center = 1; // 删除orientation参数 ranksep = "0.4"; nodesep = "0.25"; // 其余节点和边代码不变 }
3. 命令行强制指定rankdir
如果dot文件内的设置不生效,在命令行通过-G参数直接覆盖配置:
dot -Grankdir=LR -Tsvg a.dot > a.svg
4. 更换Graphviz稳定版本
7.x版本可能存在兼容性bug,尝试安装6.x系列稳定版。若yum安装失败,可手动下载预编译二进制包:
- 下载对应系统的二进制包
- 解压后将
dot命令路径添加到系统PATH - 重新运行转换命令
内容的提问来源于stack exchange,提问作者aban
相关产品推荐
相关产品推荐

