我的问题与this one基本相同,但给出的答案对我没有用。
以下是使用
呈现(source)的示例compound=true;
overlap=scalexy;
splines=true;
layout=neato;
边缘有一些不必要的重叠,但这并不太糟糕,主要问题是所有浪费的空间。
我尝试设置sep=-0.7;
以及发生了什么。
间距要好得多,但现在与节点有一些重叠。我尝试了不同的overlap
参数,这是唯一一个提供远程可接受结果的参数。
我尝试更改为fdp布局并在全局设置弹簧常量属性K
,但我只是得到这样的东西:
来源是所有直截了当的a--b--c
种东西,没有花哨的技巧。
我想要的是尽可能缩短所有边缘(最多),前提是此调整不会引入任何新的重叠,这是{{1完全失败了。对于布局引擎来说,这似乎不会太难。是否可以使用graphviz套件?我不介意更改渲染软件,但我不想在每个节点或每个边缘基础上注释源。
我的理想结果将最小化边长的偏差,一次被认为是一个节点,即每个节点除了必要的例外之外将具有相等长度的边,但是'一厢情愿。优先级是减少每条边的长度,但不能引入重叠。
我会接受部分解决方案,但它们必须是全自动且开源的。
我该怎么做?感谢。
答案 0 :(得分:2)
我找到了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
的参数化,这使得生成所需的“适度缩放”图形成为可能。
答案 1 :(得分:1)
你应该设置
overlap = compress;
这应该尽可能地压缩它。 试试sep = +1;首先,然后使用0到+1之间的值进行播放,以便为您找到最佳设置。
答案 2 :(得分:1)
我有一个带有50个节点和68个边缘的图(对不起,无法发布整个图片,只是一个片段)。找到了两个合理的预设(1和2):
digraph {
graph[
# 1. Less overlaps but less compact.
# This is the choice for now.
layout=neato; overlap=prism; overlap_scaling=-3.5;
# 2. More compact but some overlaps exist (may be adjusted by `sep`).
#layout=neato; overlap=voronoi; sep=-0.15;
# The following is common.
outputorder=nodesfirst, # Will always draw edges over nodes.
splines=curved;
]
node[fontname="Helvetica",];
node[shape=box;style="filled";penwidth="0.5";width=0;height=0;margin="0.05,0.05"];
edge[label=" ";color="#000080";penwidth="0.5";arrowhead="open";arrowsize="0.7";];
. . .
}