dot - 如何在不引入重叠的情况下使 DOT/neato 图更紧凑?

标签 dot neato

我的问题与 this one 基本相同但给出的答案对我不起作用。

这是一个示例渲染 (source)

compound=true;
overlap=scalexy;
splines=true;
layout=neato;

enter image description here

边缘有一些不必要的重叠,但这还不错,主要问题是所有浪费的空间。

我试过设置 sep=-0.7;这就是发生的事情。

enter image description here

间距要好得多,但现在与节点有一些重叠。我尝试了不同的 overlap参数,这是唯一可以给出远程可接受结果的参数。

我尝试更改为 fdp 布局并设置 Spring 常数属性 K在全局范围内,但我只是得到了这样的东西:

enter image description here

来源很直接a--b--c那种东西,没有花哨的技巧。

我想要的是尽可能缩短所有边缘(最多至少)前提是此调整不会引入任何新的重叠 ,这是sep完全失败。对于布局引擎来说,这似乎并不难。 graphviz套件可以吗?我不介意更改渲染软件,但我不想在每个节点或每个边缘的基础上注释源。

我的理想结果是最大限度地减少边长的偏差,一次考虑一个节点,即除了必要的异常(exception),每个节点都具有相等长度的边,但这是一厢情愿的想法。优先考虑的是减少每条边的长度,限制条件是不能引入重叠。

我会接受部分解决方案,但它们必须是全自动和开源的。

我怎样才能做到这一点?谢谢。

最佳答案

我找到了 https://sites.google.com/site/kuabus/programming-by-hu/graphviz-test-tool ,一个交互式工具,用于参数化许多选项并重复渲染它们。我浏览了 Java 应用程序提供的完整列表,最终得到了以下属性集:

overlap=false
maxiter=99999999
damping=9999999
voro_margin=.001
start=0.1
K=1
nodesep=999999999999
labelloc=c
defaultdist=9999999
size=20,20
sep=+1
normalize=99999999
labeljust=l
outputorder=nodesfirst
concentrate=true
mindist=2
fontsize=99999999
center=true
scale=.01
inputscale=99999999
levelsgap=9999999
epsilon=0.0001

我找不到 neato 的参数化这使得生成所需的“适度缩放”图形成为可能。

关于dot - 如何在不引入重叠的情况下使 DOT/neato 图更紧凑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27755365/

相关文章:

graphviz - 使用 graphviz 和 neato 防止记录重叠

graphviz - 在graphviz上设置节点方向

format - 如何在Graphviz上添加虚线下划线标签?

graphviz点: how to insert arrows from a node to center of an arrow

tree - 在 graphviz/点树可视化中强制左右节点顺序

graph - 边用 Graphviz 和 Dot 指向边

graphviz - 使用 Graphviz 和neato 时集群边界和节点之间的填充

Graphviz:边缘与具有neato的传递节点之间的距离

python - 将引擎从 dot 更改为 neato 时未找到 graphviz PATH 变量

graphviz - 在 pygraphviz/dot 的 networkx 包装器中以编程方式指定相同等级的节点