使用 TikZ 和 PGF 进行算法图形绘制

使用 TikZ 和 PGF 进行算法图形绘制

我正在尝试 TikZ/PGF 的算法图形绘制功能,一开始我非常兴奋。然而,现在我陷入了困境。

下面是我的示例。我认为如果将节点“J”向下向左移动并将节点“G”移到循环 AIJFA 内,图表看起来会更好。

到目前为止,我已经尝试了不同的随机种子和 TeX 文件中线条的不同随机顺序。我还尝试过使用绝对节点定位,力导向绘图会对其进行微调,但从未产生任何结果。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force}
\begin{document}
\tikz \graph [spring layout, random seed=1] {
  A -- F;
  A -- G;
  A -- I;
  B -- F;
  C -- D;
  C -- F;
  D -- E;
  D -- H;
  D -- I;
  E -- I;
  F -- J;
  G -- I;
  G -- J;
  I -- J;
};
\end{document}

简单图表

答案1

我看到你正在使用spring layout,但在我看来,生成的图形更像是分布式电荷(电荷),这让我认为更合适。只需使用它,您就已经在最终图形中spring electrical layout看到了差异。此外,要微调图形,您可以使用键nudge=<coordinate>(或变体nudge updown和),虽然在我看来它似乎有点简陋,但如果绘图需要“简单”的推动,那么就可以了:leftright

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force}
\begin{document}
\tikz \graph [spring electrical layout, random seed=1] {
  A -- F;
  A -- I;
  B -- F;
  C -- D;
  C -- F;
  D -- E;
  D -- H;
  D -- I;
  E -- I;
  F -- J[nudge=(210:10mm)];
  I -- J;
  G[nudge=(260:11mm)] -- J;
  G -- A;
  G -- I;
};
\end{document}

在此处输入图片描述

您还可以尝试将electric charges 设置为节点,微调它们排斥(正值)或吸引(负值)连接节点的强度。但这种方式的结果有时相当难以预测。

第二种方法

如果您查看上图,似乎节点与节点和J之间存在不可见的连接。对于具有 的节点,情况也是如此。我的想法是,如果我可以建立这种不可见的连接,那么生成的图形可能就是 OP 想要的,没有任何s 并且图形更可靠。为此,我们必须在建立连接时为 line-to 运算符 ( ) 提供选项(我还冒昧地将代码缩短了一点):CDGFnudge--draw=none

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force}
\begin{document}
\tikz \graph [spring electrical layout] {
  A -- F -- C -- D -- E -- I -- A;
  D -- I;
  B -- F;
  H -- D;
  I -- J -- F;
  I -- G -- A;
  G -- J;
  % invisible connections
  D --[draw=none] J --[draw=none] C;
  G --[draw=none] F;
};
\end{document}

结果与以前几乎相同,但这次应该不会出现错误:

在此处输入图片描述

相关内容