我想画这样的图。但是我只画出这一个,
它看起来太丑了。我很沮丧,有人能帮我得到我想要的东西吗?
我的代码如下
\documentclass[tikz,border=10pt]{standalone}
\usepackage{verbatim}
\usepackage{forest}
\usetikzlibrary{arrows.meta, shapes.geometric, calc, shadows}
\colorlet{mygreen}{green!75!black}
\colorlet{col1in}{red!30}
\colorlet{col1out}{red!40}
\colorlet{col2in}{mygreen!40}
\colorlet{col2out}{mygreen!50}
\colorlet{col3in}{blue!30}
\colorlet{col3out}{blue!40}
\colorlet{col4in}{mygreen!20}
\colorlet{col4out}{mygreen!30}
\colorlet{col5in}{blue!10}
\colorlet{col5out}{blue!20}
\colorlet{col6in}{blue!20}
\colorlet{col6out}{blue!30}
\colorlet{col7out}{orange}
\colorlet{col7in}{orange!50}
\colorlet{col8out}{orange!40}
\colorlet{col8in}{orange!20}
\colorlet{linecol}{blue!60}
\begin{document}
\pgfkeys{/forest,
rect/.append style = {rectangle, rounded corners = 2pt,
inner color = col6in, outer color = col6out},
ellip/.append style = {ellipse, inner color = col5in,
outer color = col5out},
orect/.append style = {rect, font = \sffamily\bfseries,
text width = 280pt, text centered,
minimum height = 10pt, outer color = col3out},
oellip/.append style = {ellip,
font = \sffamily\bfseries\large, text centered}}
\begin{forest}
for tree={
font=\sffamily\bfseries,
line width=1pt,
draw=linecol,
ellip,
align=center,
child anchor=north,
parent anchor=south,
drop shadow,
l sep+=12.5pt,
edge path={
\noexpand\path[color=linecol, rounded corners=5pt,
>={Stealth[length=10pt]}, line width=1pt, ->, \forestoption{edge}]
(!u.parent anchor) -- +(0,-5pt) -|
(.child anchor)\forestoption{edge label};
},
where level={3}{tier=tier3}{},
where level={0}{l sep-=15pt}{},
where level={1}{
if n={1}{
edge path={
\noexpand\path[color=linecol, rounded corners=5pt,
>={Stealth[length=10pt]}, line width=1pt, ->,
\forestoption{edge}]
(!u.west) -| (.child anchor)\forestoption{edge label};
},
}{
edge path={
\noexpand\path[color=linecol, rounded corners=5pt,
>={Stealth[length=10pt]}, line width=1pt, ->,
\forestoption{edge}]
(!u.east) -| (.child anchor)\forestoption{edge label};
},
}
}{},
}
[Dynamic Object, outer color=col3out
[Senor 1
[Filter, rect, name=sse1
]
]
[Senor 2
[Filter, rect, name=sse2
]
]
[, phantom, calign with current
[A\\B, phantom
[Mutli-Sensor Fusion, orect, name=us
[{Consensus}, oellip
]
]
]
]
[Senor 3
[Filter, rect, name=sse3
]
]
[Senor 4
[Filter, rect, name=sse4
]
]
]
\begin{scope}[color = linecol, rounded corners = 5pt,
>={Stealth[length=10pt]}, line width=1pt, ->]
\draw (sse2.south) -- (us.north -| sse2.south);
\draw (sse3.south) -- (us.north -| sse3.south);
\coordinate (c1) at ($(sse1.south)!2/5!(sse2.south)$);
\coordinate (c2) at ($(sse3.south)!2/5!(sse4.south)$);
\draw (sse1.south) -- +(0,-10pt) -| (us.north -| c1);
\draw (sse4.south) -- +(0,-10pt) -| (us.north -| c2);
\end{scope}
\end{forest}
\end{document}
答案1
可能是这样的:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{verbatim}
\usepackage{forest}
\usetikzlibrary{arrows.meta, shapes.geometric, calc, shadows,fit}
\colorlet{mygreen}{green!75!black}
\colorlet{col1in}{red!30}
\colorlet{col1out}{red!40}
\colorlet{col2in}{mygreen!40}
\colorlet{col2out}{mygreen!50}
\colorlet{col3in}{blue!30}
\colorlet{col3out}{blue!40}
\colorlet{col4in}{mygreen!20}
\colorlet{col4out}{mygreen!30}
\colorlet{col5in}{blue!10}
\colorlet{col5out}{blue!20}
\colorlet{col6in}{blue!20}
\colorlet{col6out}{blue!30}
\colorlet{col7out}{orange}
\colorlet{col7in}{orange!50}
\colorlet{col8out}{orange!40}
\colorlet{col8in}{orange!20}
\colorlet{linecol}{blue!60}
\begin{document}
\pgfkeys{/forest,
rect/.append style = {rectangle, rounded corners = 2pt,
inner color = col6in, outer color = col6out},
ellip/.append style = {ellipse, inner color = col5in,
outer color = col5out},
orect/.append style = {rect, font = \sffamily\bfseries,
text width = 280pt, text centered,
minimum height = 10pt, outer color = col3out},
oellip/.append style = {ellip,
font = \sffamily\bfseries\large, text centered}}
\begin{forest}
for tree={
font=\sffamily\bfseries,
line width=1pt,
draw=linecol,
ellip,
align=center,
child anchor=north,
parent anchor=south,
drop shadow,
l sep=1cm,
edge path={
\noexpand\path[color=linecol, rounded corners=5pt,
>={Stealth[length=10pt]}, line width=1pt, ->, \forestoption{edge}]
(!u.parent anchor) -- +(0,-5pt) -|
(.child anchor)\forestoption{edge label};
},
where level={3}{tier=tier3}{},
where level={0}{l sep-=15pt}{},
where level={1}{
if n={1}{
edge path={
\noexpand\path[color=linecol, rounded corners=5pt,
>={Stealth[length=10pt]}, line width=1pt, ->,
\forestoption{edge}]
(!u.south) --++(0,-8pt) -| (.child anchor)\forestoption{edge label};
},
}{
edge path={
\noexpand\path[color=linecol, rounded corners=5pt,
>={Stealth[length=10pt]}, line width=1pt, ->,
\forestoption{edge}]
(!u.south) --++(0,-8pt) -| (.child anchor)\forestoption{edge label};
},
}
}{},
}
[Dynamic Object,l sep=1.5cm, outer color=col3out
[Senor 1,name=senor1,
[Filter, rect, name=sse1
]
]
[Senor 2,name=senor2,
[Filter, rect, name=sse2
]
]
[, phantom, calign with current
[A\\B, phantom
[Mutli-Sensor Fusion, orect, name=us
[{Consensus}, oellip
]
]
]
]
[Senor 3,name=senor3,
[Filter, rect, name=sse3
]
]
[Senor 4,name=senor4,
[Filter, rect, name=sse4
]
]
]
\begin{scope}[color = linecol, rounded corners = 5pt,
>={Stealth[length=10pt]}, line width=1pt, ->]
\draw (sse2.south) -- (us.north -| sse2.south);
\draw (sse3.south) -- (us.north -| sse3.south);
\coordinate (c1) at ($(sse1.south)!2/5!(sse2.south)$);
\coordinate (c2) at ($(sse3.south)!3/5!(sse4.south)$);
\draw (sse1.south) -- +(0,-22pt) -| (us.north -| c1);
\draw (sse4.south) -- +(0,-22pt) -| (us.north -| c2);
\node[draw,dash dot,fit=(senor1)(sse4)(senor4),inner ysep=12pt,]{};
\coordinate (m1) at ($(sse2)!0.5!(senor2)$);
\coordinate (m2) at ($(senor2)!0.5!(senor3)$);
\node[scale=3] at (m1-|m2) {.....};
\end{scope}
\end{forest}
\end{document}