如何在 tikz 中创建一个简单的多重图?

如何在 tikz 中创建一个简单的多重图?

我正在尝试使用 tikz 包来创建一个简单的多重图,它看起来应该像这样(在 MS Paint 中完成):

非常糟糕的照片

我使用 tikz 包编写了一个代码来制作非常类似的东西。如下所示:

使用 tikz

但是我不知道如何明确表示节点 3 连接到自身。这是我的代码:

\begin{tikzpicture}

  [scale=1,auto=left,every node/.style={circle,fill=blue!20}]

  \node (n1) at (5,7) {1};

  \node (n2) at (3,5)  {2};

  \node (n3) at (5,5)  {3};

  \node (n4) at (7,5) {4};

  \node (n5) at (5,3)  {5};

  \foreach \from/\to in {n1/n3,n2/n3,n4/n3,n5/n3}

    \draw (\from) -- (\to);

\end{tikzpicture}

如果有人能帮忙,我将不胜感激!

答案1

虽然topaths库(默认加载)为我们提供了一些loop样式,loop above right但我们可以定义一种。

如果我们将every loop(包含->, shorten >=1pt)设置为空样式,我们也会删除箭头尖和缩短量。

我还擅自使用了positioning库来进行节点的定位以及edge操作符来连接节点。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\tikzset{
  loop above right/.style={above right, out= 60, in= 30, loop},
  loop above left/.style ={above left,  out=150, in=120, loop},
  loop below right/.style={below right, out=330, in=300, loop},
  loop below left/.style ={below left,  out=240, in=210, loop}}
\begin{document}
\begin{tikzpicture}[
  auto=left,
  every node/.style={circle, fill=blue!20, outer sep=+0pt},
  every loop/.style=,
  node distance=1cm]

  \node              (n1) {1};
  \node[below=of n1] (n3) {3};
  \node[below=of n3] (n5) {5};
  \node[ left=of n3] (n2) {2};
  \node[right=of n3] (n4) {4};

  \path[thick] (n3) edge (n1)
                    edge (n2)
                    edge (n4)
                    edge (n5)
                    edge[loop above right] ();
  \path[red] (n1) edge [loop left]  ()
             (n5) edge [loop right] ()
             (n2) edge [loop below] ()
             (n4) edge [loop above] ()
             (n3) edge [loop above left]  ()
                  edge [loop below left]  ()
                  edge [loop below right] ();
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容