Как использовать Tikz для рисования простой модели

Как использовать Tikz для рисования простой модели
\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                chains,
                decorations.pathreplacing,
                calligraphy,
                positioning,
                shapes}

введите описание изображения здесь

решение1

С использованием только тех библиотек, которые предоставляются в tikzкомплекте. Показаны два случая: (i) которые воссоздают ваш образ, (ii) возможный редизайн, который мне больше нравится.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                calc, chains,
                decorations.pathreplacing,
                calligraphy,
                positioning,
                quotes,
                shapes}

\begin{document}
    \begin{figure}[ht]
    \centering
\begin{tikzpicture}[
node distance = 8mm and 24mm,
            > = Stealth,
every path/.append style = {draw=cyan},
every edge quotes/.append style = {font=\footnotesize, sloped},
     E/.style = {ellipse, draw, semithick, fill=cyan!30},
     N/.style = {draw, semithick, minimum width = 8em, inner sep=1ex}
                    ]
\node (a) [N]  {text};
\node (b) [N, below=of a]  {text};
\node (e) [E, right=of {$(a.east)!0.5!(b.east)$}]  {TEXT};
%
\coordinate[below=of b.south] (aux);
\draw[<->]  (a.west) -- ++ (-2em,0) |- (b.west) coordinate[pos=0.25] (ab);
\draw[->]   (ab) -- ++ (-1em,0)
                 |- (aux) node[below, font=\footnotesize] {Model 3}
                 -| (e.west);
\draw[->, shorten >=1pt]   (a.east) to ["Model 1"]     (e.west);
\draw[->, shorten >=1pt]   (b.east) to ["Model 2" ']   (e.west);
\end{tikzpicture}
    \end{figure}

    \begin{figure}[ht]
    \centering
\begin{tikzpicture}[
node distance = 8mm and 16mm,
            > = Stealth,
every path/.append style = {draw=cyan},
every edge quotes/.append style = {font=\footnotesize, sloped},
     E/.style = {ellipse, draw, semithick, fill=cyan!30},
     N/.style = {draw, semithick, minimum width = 8em, inner sep=1ex}
                    ]
\node (a) [N]  {text};
\node (b) [N, below=of a]  {text};
\node (e) [E, right=of {$(a.east)!0.5!(b.east)$}]  {TEXT};
%
\coordinate[below=of b.south] (aux);
\draw[<->]  (a.west) -- ++ (-2em,0) |- (b.west) coordinate[pos=0.25] (ab);
\draw[->]   (ab) -- ++ (-1em,0) 
                 |- (aux) node[below, font=\footnotesize] {Model 3} 
                 -| (e);
\draw[->, shorten >=1pt]   (a.east) to ["Model 1"]     (e);
\draw[->, shorten >=1pt]   (b.east) to ["Model 2" ']   (e);
\end{tikzpicture}
    \end{figure}
\end{document}

введите описание изображения здесь

решение2

С правильными инструментами:

  • форма ellipseиз shapes.geometricбиблиотеки

  • библиотека quotesпозволяет легко размещать узлы вдоль рёбер

  • библиотека ext.paths.orthoобеспечивает работу с путямиr-lr

    (<start>) r-lr (<target>)
    

    который сначала рисует ortho/lr distanceвлево, затем вверх/вниз, а затем вправо к <target>.

  • библиотека ext.positioning-plusпозволяет

    right = of (r1)(r2)
    

    который размещает узлы справа от вертикального центра r1 и r2, т.е. ($(r1.north east)!.5!(r2.south east)$).

Координаты mи r3используются как начало и середина стрелки Модели 3.

Код

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{
  arrows.meta,          % for arrow tips
  shapes.geometric,     % for ellipse shape
  ext.positioning-plus, % for of (r1)(r2)
  ext.paths.ortho,      % for r-lr and r-du
  quotes,               % for "nodes" on edges
}
\begin{document}
\begin{tikzpicture}[
  >=Latex,
  r/.style   = {rectangle, draw=blue, minimum width=2cm},
  ell/.style = {ellipse,   draw,      fill=blue!30},
  node distance=5mm and 2cm,
  % r-lr: to the left, then up/down, then right
  lr/.style   = {to path={r-lr (\tikztotarget)\tikztonodes}},
  % lrhv: lr to #1, from #1 to target
  lrhv/.style = {to path={r-lr (#1) \tikztonodes -| (\tikztotarget)}},
]
\node[r] (r1)                        {TEXT};
\node[r] (r2) [below=of r1]          {TEXT};
\coordinate[below=of r2] (r3); % auxilliary coordinate

% right = of (r1)(r2) → right = of <the vertical middle of r1 and r2>
\node[ell] (ell) [right=of (r1)(r2)] {TEXT};

\path[blue, ->, text=black, sloped]
  (r1)      edge[-,lr]           coordinate(m) (r2)
  (r1.east) edge["Model 1"]                    (ell.west)
  (r2.east) edge["Model 2" ']                  (ell.west)
  (m)       edge["Model 3" at end, ', lrhv=r3] (ell.west);
\end{tikzpicture}
\end{document}

Выход

введите описание изображения здесь

решение3

Простые фигуры следует рисовать простыми кодами.

(какая-то ошибка на сервере, не могу загрузить рисунок)

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}[teal,thick,nodes={text=black}]
\path 
(5,0) node[ellipse,draw,fill=yellow,inner ysep=3mm] (E) {Ellipse}
(0,1) node[draw,minimum width=3cm,minimum height=8mm] (Ra) {Rectangle}
(0,-1) node[draw,minimum width=3cm,minimum height=8mm] (Rb) {Rectangle}
(-2,0) coordinate (A)
;       
\draw[->] (Ra.east)--(E) node[above,sloped,midway]{Model 1};
\draw[->] (Rb.east)--(E) node[below,sloped,midway]{Model 2};
\draw (A)|-(Ra) (A)|-(Rb);
\draw[->] (A)--++(180:.5)--++(-90:2.5)-|(E) node[below,pos=.25]{Model 3};
\end{tikzpicture}
\end{document}

Связанный контент