13

我的问题与这个问题基本相同,但给定的答案对我不起作用。

这是一个示例渲染(源)

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

在此处输入图像描述

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

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

在此处输入图像描述

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

我尝试更改为 fdp 布局并K全局设置 spring 常量属性,但我得到了这样的东西:

在此处输入图像描述

来源都是直截了当a--b--c的东西,没有花哨的技巧。

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

我的理想结果是最小化边长的偏差,一次考虑一个节点,即每个节点除了必要的例外之外,都有相等长度的边,但这是一厢情愿的想法。优先级是在不能引入重叠的约束下减少每条边的长度。

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

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

4

3 回答 3

6

我找到了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使生成所需的“适度缩放”图形成为可能的参数化。

于 2017-02-08T00:52:11.673 回答
1

你应该设置

overlap = compress;

这应该尽可能地压缩它。试试 sep = +1; 首先,然后使用 0 到 +1 之间的值来找到最适合您的设置。

于 2015-01-22T09:53:07.010 回答
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";];
. . .
}

在此处输入图像描述

于 2020-11-28T20:00:16.323 回答