因此我使用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!这里是 Ti钾Z 代码会产生这种结果。不幸的是,这并不是太自动化。但是,它可能是图形绘制算法更深层次应用的基础。
\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}