考虑一下这个小图:
digraph G {
{rank = same; node12; node11;}
node11 [ label = "node left", shape=square ]
node11 -> node11 [label=" i[2,9]"]
node11 -> node12 [label=" k[2]"]
node12 [ label = "node right", shape=square ]
node12 -> node12 [label=" i[9]"]
}
我用dot -Tpdf
将其转换为pdf
$ dot -V
dot - graphviz version 2.40.1 (20161225.0304)
如您所见,左节点的(自)循环与连接左节点和右节点的边重叠。我试图通过使用graphviz的compass功能来解决此问题。我的第一次尝试是:node11:w -> node11:w [label=" i[2,9]"]
:
但是,循环的结果形状已更改。我不希望这样做,并且我同意它看起来是uglier。增加nodesep=1;
不会使您得到与正确形状相同的形状。当然,您可以通过添加:e
使右循环与左循环相同。但是我更喜欢原始右循环的形状。
还有其他方法可以实现这一目标吗?
顺便说一句:Mathematica图形图在这里比较聪明:它将自动循环自动放置到另一侧。但是恕我直言,需要大量的自定义才能获得中性风格:
Graph[{1 -> 1, 1 -> 2, 2 -> 2},
EdgeLabels -> {(1 -> 1) -> "i[2,9]", (1 -> 2) -> "k[2]", (2 -> 2) ->
"i[9]"}, EdgeLabelStyle -> Directive[15, Background -> White],
VertexSize -> 0.3, VertexShapeFunction -> "Rectangle",
VertexStyle -> White, EdgeStyle -> Black,
VertexLabels -> {1 -> Placed["node left", Center],
2 -> Placed["node right", Center]}]
请注意:这只是图的一部分。最终图形如下:
答案 0 :(得分:0)
您也许可以这样做:
digraph G {
node[margin=0 _color=invis shape=none height=.2
label=<<table BORDER="1" CELLBORDER="0" CELLPADDING="0" CELLSPACING="0">
<tr>
<td port="a1"></td>
<td port="b1"></td>
<td port="c1"></td>
<td port="d1"></td>
<td port="e1"></td>
</tr>
<tr>
<td port="a2"></td>
<td rowspan="3" colspan="3">
\N
</td>
<td port="e2"></td>
</tr>
<tr>
<td port="a3"></td>
<td port="e3"></td>
</tr>
<tr>
<td port="a4"></td>
<td port="e4"></td>
</tr>
<tr>
<td port="a5"></td>
<td port="b5"></td>
<td port="c5"></td>
<td port="d5"></td>
<td port="e5"></td>
</tr>
</table>>]
x:a2:w->x:a4:w
x:e2:e->x:e4:e
x->y
y:a2:w->y:a4:w
}