graphviz重叠边和箭头

graphviz重叠边和箭头

因此我使用graphviz并写了下面的文章:

digraph MyGraph {
    rankdir=TB;
    size="8,5";
    node [shape = circle]; 1 2 3 4 5 6 7 8 9 r
    1->4
    1->4
    1->5
    1->5

    2->6
    2->6
    2->7
    2->7

    3->8
    3->8
    3->9
    3->9

    4->1
    4->1
    4->5
    4->5

    5->1
    5->1
    5->4
    5->4

    6->2
    6->2
    6->7
    6->7

    7->2
    7->2
    7->6
    7->6

    8->3
    8->3
    8->9
    8->9

    9->3
    9->3
    9->8
    9->8

    r->1
    r->1
    r->1

    r->2
    r->2
    r->2

    r->3
    r->3
}

输出: 在此处输入图片描述

我不喜欢边缘重叠(相交)。有没有办法自动解决它?如果没有,如何手动解决?我试图使用它,overlap = false;但它没有改变任何东西。另外,tikzpicture可以解决问题,但我不确定怎么做。此外,我尝试搜索一些以前的帖子,但他们要求不同的东西。

答案1

欢迎来到 TeX.SE!这里是 TiZ 代码会产生这种结果。不幸的是,这并不是太自动化。但是,它可能是图形绘制算法更深层次应用的基础。

\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered} 
\begin{document}
\begin{tikzpicture}
 \graph [layered layout,  sibling distance=3cm, level distance=2cm,
 nodes={draw,circle,minimum size=1cm},edges={opacity=0}] {
     r  -> {1 -> 4 [xshift=-1cm] -> 5, 2 -> 6 [xshift=-0.5cm] -> 7 [xshift=0.5cm], 
     3 -> 8 [xshift=-0.5cm] -> 9 [xshift=0.5cm]};
 };
 \begin{scope}[every edge/.append style={-latex}]
  \foreach \X in {1,2,3}
  {\draw (r) edge[bend right=15] (\X) (r) edge (\X)
  (r) edge[bend right=-15] (\X);}
  \foreach \X/\Y in {1/4,4/5,2/6,6/7,3/8,8/9}
  {\draw(\X) edge[bend right=10] (\Y)
  (\X) edge[bend right=25] (\Y)
  (\Y) edge[bend right=10] (\X)
  (\Y) edge[bend right=25] (\X);}
  \foreach \X/\Y in {1/5,2/7,3/9}
  {\draw
  (\X) edge[bend left=10] (\Y)
  (\X) edge[bend left=20] (\Y)
  (\Y) edge[bend right=30] (\X)
  (\Y) edge[bend right=40] (\X);}
 \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容