Graphviz中边缘和节点之间的距离

9

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

边缘和节点之间距离的示意图


或许可以使用加权值:https://dev59.com/zWzXa4cB1Zd3GeqPZ_5s - Ross Rogers
3个回答

5
这里有一种技巧,可以避免创建自定义节点形状。您可能需要进一步处理一些品味问题,以获得您想要的效果。
使用类似HTML标签的这种技术的优点是,改变矩形内部和外部的空间变得非常简单,只需分别更改内部点数(这里为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参数来强制宽高比,以使所有箭头尖端对齐。否则,一些尖端将会与不可见的外部矩形的边缘相遇。

3

据我所知,这是不可能的

唯一可行的选择是使用headclip使边缘到达节点中心或外形的边缘(就像您在示例中所做的那样)。

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

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

Graphviz diagram

希望有人知道更好的方法来解决这个问题...


(注:此内容为HTML格式,已保留标签)

3

就像其他回答所说的那样,这并不是一件容易的事情。使用高度、宽度、固定大小、标签位置和边距节点参数的组合,您可以获得任何想要的效果。如果您想扩大距离,则最好使用边距,但要最小化它,您需要使用其他参数。例如,此图形中箭头几乎会触碰“O”节点的文本。

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

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

graphviz diagram

或者,如果您真的想付出努力,您可以创建一个自定义节点形状,并对其进行任何想要的更改。


我不确定这是否是原帖作者想要的:箭头仍然触及节点的外形 - 这只是改变了节点的尺寸。同样,边距会在节点标签周围添加空间,使节点变大。 - marapet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接