理解 TikZ 中的算法图形绘制

理解 TikZ 中的算法图形绘制

使用 TikZ 的 graphdrawing 库,是否可以绘制以下图形

采用这种格式吗?

我使用以下代码来“手动”绘制它:

\tikz[nodes={circle, draw}]  {
\node (1)  at (0,0) {1};
\node (2)  at (-1.5,-1.5) {2};
\node (5)  at (0, -1.5) {5};
\node (4)  at (1.5, -1.5) {4};
\node (3)  at (0, -3) {3};

\graph {
    (1)--(2)--(3)--(4)--(1); (2)--(5)--(4);
};
}

但是,我必须绘制大量类似的图形,这变得非常繁琐。在我看来,图形绘制库中基于力的布局必须适合实现这种特殊的图形格式(因为它非常“平衡”)。

但是我使用类似的东西没有成功

\tikz \graph [spring layout, nodes={circle, draw}, node distance=1.5cm, horizontal=2 to 4]{
1--2--3--4--1; 2--5--4; 
};

并且也不适用于弹簧电气布局。我尝试过调整不同的参数(请参阅 TikZ 手册中的第 32.1 节),但似乎没有任何结果。我甚至无法防止边缘重叠。

我是否误解了 graphdrawing 库的用途?除了手动定义节点的位置之外,有没有更短的方法来以这种自然格式绘制图形?

答案1

这可能会为你指明正确的方向

tkz-graph包装

在此处输入图片描述

\documentclass{standalone}
\usepackage{tkz-graph}

\begin{document}
\begin{tikzpicture}

    \draw[help lines] (0,-2) grid (4,2);
    \SetGraphUnit{2}
    \GraphInit[vstyle=Normal]
    \Vertex{A}
    \EA(A){B} \NO(B){C} \SO(B){D} \EA(B){E}
    \Edges(A,D,E,C,A,B,E)
\end{tikzpicture}
\end{document}

答案2

另一种选择是tikz-cd

输出

在此处输入图片描述

代码

\documentclass[tikz, margin=10pt]{standalone}

\usepackage{tikz-cd} % if tikz is already loaded, you can also use \usetikzlibrary{cd}

\tikzcdset{arrows={thick}}

\begin{document}
    \begin{tikzcd}[%
        row sep=1cm, 
        column sep=1cm, 
        cells={nodes={draw, circle, thick}},
    ]
                & 1 \arrow[dl,-] \arrow[dr,-] & \\
        2 \arrow[r,-] \arrow[dr,-]  & 5 \arrow[r,-]   & 4  \arrow[dl,-]\\
                & 3  & 
    \end{tikzcd}
\end{document}

相关内容