创建具有一些装饰结构的有向图

创建具有一些装饰结构的有向图

通过使用 Tikz,我想创建如下图表:

图形

所以我想要一个经典的有向图,其中每个节点都有一些文本。此外,每个节点都有一个关联的框架,框架中充满了一堆项目符号。

此外,还有三个可选但需要的属性:

  • 所有节点的大小都相同。如果它们能够正确容纳其中的文本,那就太好了,因此节点大小会根据文本最大的节点进行调整。

  • 能够将框架置于节点的所需位置(参见图中 A、C 与 B 之间的差异)。一组选项(如上、下、左、右和成对组合)就足以取代坐标位置。

  • 框架尺寸根据项目符号数量进行调整(从图表中查看不同的框架尺寸)。

凭借我目前的知识,我只能创建由节点和边组成的通用有向图。我将尝试通过阅读文档来弄清楚如何实现所有这些(假设有方法),但如果有人能伸出援手,我将不胜感激。

答案1

有几种风格,你就可以开始了:

\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}
\usetikzlibrary{positioning}

\newlist{tikzitem}{itemize}{1}
\setlist[tikzitem,1]{label=$\bullet$,nolistsep,leftmargin=*}

\begin{document}

\begin{tikzpicture}[
mynode/.style={
  circle,
  draw,
  fill=yellow,
  minimum size=1cm,
  align=center
  },
frame/.style={
  draw=cyan,
  line width=3pt,
  text width=2cm,
  rounded corners
  },
ar/.style={
  ->,
  >=latex
  }    
]
\node[mynode] (a) {Some text};
\node[mynode,below right=2cm and 6cm of a]  (c) {Some text};
\node[mynode,below left=2cm and 6cm of c]  (b) {Some text};

\node[frame,anchor=north west] at (a.-90) 
  {%
  \begin{tikzitem} 
  \item First.
  \item Second.
  \item Third.
  \end{tikzitem}%
  };
\node[frame,anchor=south west] at (b.90) 
  {%
  \begin{tikzitem} 
  \item First.
  \item Second.
  \item Third.
  \end{tikzitem}%
  };
\node[frame,anchor=west] at (c.0) 
  {%
  \begin{tikzitem} 
  \item First.
  \item Second.
  \item Third.
  \item Fourth.
  \item Fifth.
  \end{tikzitem}%
  };

\draw[ar] (a) to[bend left] (c);  
\draw[ar] (b) to[bend right] (c);  
\end{tikzpicture}

\end{document}

在此处输入图片描述

at (<name>.<angle>)可以使用语法和适当的框架锚点来控制框架相对于圆圈的位置。

我使用该enumitem包获得了 itemize 的定制版本,其中没有额外的垂直间距,也没有左边距。

相关内容