graphviz中边和节点之间的距离

时间:2011-05-25 11:47:13

标签: graphviz dot

如何配置边和节点之间的距离(红色),即节点的外形(蓝色)?

Diagram of distance between edges and nodes

3 个答案:

答案 0 :(得分:3)

这是一种可以考虑的技术,可以避免创建自定义节点形状的需要。可能存在一些品味问题,您可能需要进一步解决这些问题才能获得您想要的产品。

使用HTML-like labels这种技术的优势在于,改变矩形内外的空间变得很简单,只需更改内部点数(此处为4)和外部点数(此处为16)分别

digraph {

node [shape=none]

O [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="16" CELLPADDING="4">
<TR><TD WIDTH="70">\N</TD></TR>
</TABLE>
>]

{a,b,c,d} -> O

}

结果:

GIF rendered by 'dot' for the above graphviz input

您可以更改BORDER和CELLBORDER参数以显示或隐藏矩形。您可以调整它们的厚度,但只能是1点的倍数。我已经使用WIDTH参数强制宽高比导致所有箭头尖端对齐。否则,一些提示会遇到隐形外部矩形的边。

答案 1 :(得分:2)

就像其他答案所说,这不是一件容易的事。使用高度,宽度,fixedsize,labelloc和margin节点参数的组合,您可以获得任何您想要的效果。保证金是最好的,你是想扩大这个距离,但要最小化它,你需要使用其他参数。例如,此图表的箭头几乎触及“O”节点的文本。

digraph {
  node [shape="none" width=.2 height=.2 fixedsize="true" labelloc="top"];

  a -> O;
  b -> O;
  c -> O;
  d -> O;
}

或者,如果你真的想付出努力,你可以创建一个custom node shape,并做任何你喜欢的事情。

答案 2 :(得分:1)

不可能 AFAIK。

唯一可用的选项是使用headclip使边缘移动到节点的中心或外形的边缘(如您在示例中所做的那样)。

您可以尝试通过将某个填充放入群集并将边缘剪切到群集的(不可见)边界来向节点添加一些填充:

digraph {
  compound=true;
  subgraph cluster1 {
        style=invis;
        2;
    }
    1 -> 2[lhead=cluster1];
}

希望有人知道更好的黑客...