
решение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}