Tikz 圖形幫助

Tikz 圖形幫助

我被要求產生此圖。

原來的

從 MWE 中您可以看到,我唯一想要改進的部分是左側的三個楔形圖示(患者、醫院工作人員和訪客)和 3 個箭頭。無法弄清楚如何獲得該節點形狀,或以直角連接箭頭。

在此輸入影像描述

微量元素:

\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}

答案1

以下使用shapes.symbols庫來獲取signal節點形狀,這就是您正在尋找的以獲得正確外觀Hospital Staff等的形狀。

我還更改了它們的位置(使用節點(a)來獲得正確的高度)並更改了箭頭以獲得您想要的效果。

\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}

在此輸入影像描述

一種程式碼變體,它對具有不同文字的基本相同節點使用樣式,\foreach用於繪製所有這些箭頭的重複任務以及cycle適用的情況。

\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}

相關內容