2011-05-25 193 views
4

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

Diagram of distance between edges and nodes

+0

也许可以使用加权:http://stackoverflow.com/questions/14236804/force-graphviz-force-distance-between-nodes – 2013-05-08 01:09:11

回答

1

这是不可能 AFAIK。

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

你可以尝试一些填充,将其置于一个集群,在集群的(无形)边框添加到一个节点,有边夹:

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

希望有人知道了这更好的破解...

2

像其他答案一样,这不是一件简单的事情。使用高度,宽度,固定尺寸,labelloc和边距节点参数的组合,您可能会得到您想要的任何所需效果。保证金最好是你正在寻找扩展距离,但为了最小化它,你需要使用其他参数。例如,该图表的箭头几乎会触及'O'节点的文本。

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

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

另外,如果你真想把在努力,你可以创建一个custom node shape,做任何你想它。

+0

我不确定这是OP想要什么:箭头仍然感人节点的外形 - 这只会改变节点的尺寸。同样,保证金在节点标签周围增加空间,使节点变大。 – marapet 2011-05-26 09:37:28

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

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