Me han pedido que genere este diagrama.
Desde el MWE puedes ver que la única parte que me gustaría mejorar son los tres íconos en forma de cuña a la izquierda (pacientes, personal del hospital y visitantes) y las 3 flechas. No pude encontrar la forma de obtener esa forma de nodo o unir las flechas en ángulos rectos.
MWE:
\documentclass[border={2pt 2pt 2pt 2pt}]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}
\usetikzlibrary{shapes.geometric,shapes.arrows,positioning}
\begin{document}
\begin{tikzpicture}[fill=red!20]
%\draw[step=0.5cm,color=gray] (-15,-15) grid (15,15);
\draw[thick, fill=blue!25] (-5,-5) -- (-5,7) -- (7,7) -- (7,-5)-- (-5,-5);
\draw[thick, fill=red!25] (-4.8,-1) -- (-4.8,6.8) -- (6.8,6.8) -- (6.8,1)-- (3,1) -- (3,-1) -- (-4.8,-1);
\draw[thick, fill=yellow!25] (-4.8,-1.2) -- (3.2,-1.2) -- (3.2,0.8) -- (6.8,0.8)-- (6.8,-4.8) -- (-4.8,-4.8) -- (-4.8,-1.2);
\path
(0,.5) node(a) [fill=white,ellipse,draw,align=center]{ Milling \&\\ Meeting Area}
(-2.5,-2.5) node(b) [fill=white,rectangle,rotate=0,draw,align=center] { Beverage\\Pantry}
(0.5,-2.5) node(c) [fill=white,rectangle,rotate=0,draw,align=center] { Offices}
(3.5,-2.5) node(d) [fill=white,rectangle,rotate=0,draw,align=center] { Quiet\\Room}
(0,-3) node(e) [rotate=0,align=center] { Secure Rooms}
(-3,-6) node(f) [draw, arrow box, arrow box arrows={north:.5cm}] { Volunteers}
(0,-6) node(g) [draw, arrow box, arrow box arrows={north:.5cm}] { Chaplains}
(3,-6) node(h) [draw, arrow box, arrow box arrows={north:.5cm,south:.5cm}] { Visiting on \\ Wards}
(-6,1) node(i) [draw, arrow box, arrow box arrows={east:.5cm}] { Visitors}
(-6,0) node(j) [draw, arrow box, arrow box arrows={east:.5cm}] {Hospital Staff}
(-6,-1) node(k) [draw, arrow box, arrow box arrows={east:.5cm}] { Patients}
(-3.1,3.5) node(l) [fill=white,rectangle,rotate=0,draw,align=center] { Hindu \& Sikh\\ Prayer Room}
(-.5,3.5) node(m) [fill=white,rectangle,rotate=0,draw,align=center] { New St Luke's\\Chapel}
(2,3.5) node(n) [fill=white,rectangle,rotate=0,draw,align=center] { Main Public\\Space}
(5,3.5) node(o) [fill=white,rectangle,rotate=0,draw,align=center] { Muslim Prayer\\Rooms \&\\Washing Facilities}
(5,-1) node(p) [fill=white,rectangle,rotate=0,draw,align=center] {MDT Room}
(1,6) node(q) [rotate=0,align=center] {\Large Open 24 hours a day}
;
\draw[black,triangle 45-triangle 45] (a) -- (b);
\draw[black,triangle 45-triangle 45] (a) -- (c);
\draw[black,triangle 45-triangle 45] (b) -- (c);
\draw[black,triangle 45-triangle 45] (a) -- (d);
\draw[black,triangle 45-triangle 45] (l) -- (a);
\draw[black,triangle 45-triangle 45] (m) -- (a);
\draw[black,triangle 45-triangle 45] (n) -- (a);
\draw[black,triangle 45-triangle 45] (o) -- (a);
\draw[black,triangle 45-triangle 45] (p) -- (o);
\draw[black,triangle 45-triangle 45] (j) -- (a);
\draw[black,triangle 45-triangle 45] (o) -- (a);
\draw[black,triangle 45-triangle 45] (p) -- (o);
\draw[black,triangle 45-triangle 45] (i) -- (a);
\draw[black,triangle 45-triangle 45] (k) -- (a);
\draw[thick] (-4.8,-1.2) -- (3.2,-1.2) -- (3.2,0.8) -- (6.8,0.8)-- (6.8,-4.8) -- (-4.8,-4.8) -- (-4.8,-1.2);
\end{tikzpicture}
\end{document}
Respuesta1
Lo siguiente utiliza la shapes.symbols
biblioteca para obtener la signal
forma del nodo, que es lo que está buscando para obtener el aspecto correcto, Hospital Staff
etc.
También cambié su posición (usando el nodo (a)
para obtener la altura correcta) y cambié las flechas para obtener lo que deseas.
\documentclass[border={2pt 2pt 2pt 2pt}]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}
\usetikzlibrary{shapes.geometric,shapes.arrows,shapes.symbols,positioning}
\begin{document}
\begin{tikzpicture}[fill=red!20, in arrows/.style={signal, signal to=east, text width = 1.5cm, minimum height=2\baselineskip, align=center}]
%\draw[step=0.5cm,color=gray] (-15,-15) grid (15,15);
\draw[thick, fill=blue!25] (-5,-5) -- (-5,7) -- (7,7) -- (7,-5)-- (-5,-5);
\draw[thick, fill=red!25] (-4.8,-1) -- (-4.8,6.8) -- (6.8,6.8) -- (6.8,1)-- (3,1) -- (3,-1) -- (-4.8,-1);
\draw[thick, fill=yellow!25] (-4.8,-1.2) -- (3.2,-1.2) -- (3.2,0.8) -- (6.8,0.8)-- (6.8,-4.8) -- (-4.8,-4.8) -- (-4.8,-1.2);
\path
(0,.5) node(a) [fill=white,ellipse,draw,align=center]{ Milling \&\\ Meeting Area}
(-2.5,-2.5) node(b) [fill=white,rectangle,rotate=0,draw,align=center] { Beverage\\Pantry}
(0.5,-2.5) node(c) [fill=white,rectangle,rotate=0,draw,align=center] { Offices}
(3.5,-2.5) node(d) [fill=white,rectangle,rotate=0,draw,align=center] { Quiet\\Room}
(0,-3) node(e) [rotate=0,align=center] { Secure Rooms}
(-3,-6) node(f) [draw, arrow box, arrow box arrows={north:.5cm}] { Volunteers}
(0,-6) node(g) [draw, arrow box, arrow box arrows={north:.5cm}] { Chaplains}
(3,-6) node(h) [draw, arrow box, arrow box arrows={north:.5cm,south:.5cm}] { Visiting on \\ Wards}
(a)++(-5.5,0) node(j) [draw, anchor=east, in arrows] {Hospital Staff}
(j.east)++(0,1) node(i) [draw, anchor=east, in arrows] { Visitors}
(j.east)++(0,-1) node(k) [draw, anchor=east, in arrows] { Patients}
(-3.1,3.5) node(l) [fill=white,rectangle,rotate=0,draw,align=center] { Hindu \& Sikh\\ Prayer Room}
(-.5,3.5) node(m) [fill=white,rectangle,rotate=0,draw,align=center] { New St Luke's\\Chapel}
(2,3.5) node(n) [fill=white,rectangle,rotate=0,draw,align=center] { Main Public\\Space}
(5,3.5) node(o) [fill=white,rectangle,rotate=0,draw,align=center] { Muslim Prayer\\Rooms \&\\Washing Facilities}
(5,-1) node(p) [fill=white,rectangle,rotate=0,draw,align=center] {MDT Room}
(1,6) node(q) [rotate=0,align=center] {\Large Open 24 hours a day}
;
\draw[black,triangle 45-triangle 45] (a) -- (b);
\draw[black,triangle 45-triangle 45] (a) -- (c);
\draw[black,triangle 45-triangle 45] (b) -- (c);
\draw[black,triangle 45-triangle 45] (a) -- (d);
\draw[black,triangle 45-triangle 45] (l) -- (a);
\draw[black,triangle 45-triangle 45] (m) -- (a);
\draw[black,triangle 45-triangle 45] (n) -- (a);
\draw[black,triangle 45-triangle 45] (o) -- (a);
\draw[black,triangle 45-triangle 45] (p) -- (o);
\draw[black,triangle 45-triangle 45] (o) -- (a);
\draw[black,triangle 45-triangle 45] (p) -- (o);
\draw[black, triangle 45-triangle 45] (i) -- ++(3,0) coordinate(tmp) |- (k);
\draw[black, triangle 45-triangle 45] (j) -- (j-|tmp) -- (a);
\draw[thick] (-4.8,-1.2) -- (3.2,-1.2) -- (3.2,0.8) -- (6.8,0.8)-- (6.8,-4.8) -- (-4.8,-4.8) -- (-4.8,-1.2);
\end{tikzpicture}
\end{document}
Una variante de código que usa estilos para básicamente los mismos nodos con texto diferente, \foreach
para la tarea repetitiva de dibujar todas esas flechas, y cycle
cuando corresponda.
\documentclass[border={2pt 2pt 2pt 2pt}]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes.geometric,shapes.arrows,shapes.symbols}
\begin{document}
\begin{tikzpicture}[
fill=red!20,
in arrows/.style={draw, signal, signal to=east, text width = 1.5cm, minimum height=2\baselineskip, align=center},
boxes/.style={fill=white, rectangle, draw, align=center},
arrowboxes/.style={draw, arrow box, arrow box arrows={#1}}
]
%\draw[step=0.5cm,color=gray] (-15,-15) grid (15,15);
\draw[thick, fill=blue!25] (-5,-5) -- (-5,7) -- (7,7) -- (7,-5)-- cycle;
\draw[thick, fill=red!25] (-4.8,-1) -- (-4.8,6.8) -- (6.8,6.8) -- (6.8,1)-- (3,1) -- (3,-1) -- cycle;
\draw[thick, fill=yellow!25] (-4.8,-1.2) -- (3.2,-1.2) -- (3.2,0.8) -- (6.8,0.8)-- (6.8,-4.8) -- (-4.8,-4.8) -- cycle;
\path
(0,.5) node(a) [fill=white,ellipse,draw,align=center]{ Milling \&\\ Meeting Area}
(-2.5,-2.5) node(b) [boxes] { Beverage\\Pantry}
(0.5,-2.5) node(c) [boxes] { Offices}
(3.5,-2.5) node(d) [boxes] { Quiet\\Room}
(0,-3) node(e) [align=center] { Secure Rooms}
(-3,-6) node(f) [arrowboxes={north:.5cm}] { Volunteers}
(0,-6) node(g) [arrowboxes={north:.5cm}] { Chaplains}
(3,-6) node(h) [arrowboxes={north:.5cm,south:.5cm}] { Visiting on \\ Wards}
(a)++(-5.5,0) node(j) [anchor=east, in arrows] {Hospital Staff}
(j.east)++(0,1) node(i) [anchor=east, in arrows] { Visitors}
(j.east)++(0,-1) node(k) [anchor=east, in arrows] { Patients}
(-3.1,3.5) node(l) [boxes] { Hindu \& Sikh\\ Prayer Room}
(-.5,3.5) node(m) [boxes] { New St Luke's\\Chapel}
(2,3.5) node(n) [boxes] { Main Public\\Space}
(5,3.5) node(o) [boxes] { Muslim Prayer\\Rooms \&\\Washing Facilities}
(5,-1) node(p) [boxes] {MDT Room}
(1,6) node(q) {\Large Open 24 hours a day}
;
\foreach\x in {b,c,d,l,m,n,o}
\draw[black,triangle 45-triangle 45] (a) -- (\x);
\draw[black,triangle 45-triangle 45] (b) -- (c);
\draw[black,triangle 45-triangle 45] (p) -- (o);
\draw[black, triangle 45-triangle 45] (i) -- ++(3,0) coordinate(tmp) |- (k);
\draw[black, triangle 45-triangle 45] (j) -- (j-|tmp) -- (a);
\draw[thick] (-4.8,-1.2) -- (3.2,-1.2) -- (3.2,0.8) -- (6.8,0.8)-- (6.8,-4.8) -- (-4.8,-4.8) -- cycle;
\end{tikzpicture}
\end{document}