如何在 tikz 中绘制此图?也欢迎任何指向相关库和包的指针。在这种情况下,如果您也建议一个帮助文件(类似示例)会很好吗?
答案1
下次,请注意,您应该自己研究解决方案并发布 MWE,它至少提供文档的框架以及图片节点的文本。(对于想要帮助您的人来说,这比从图像中复制要容易得多。)
此答案用于forest
将图表创建为树。它使用阴影为节点和shadows
库提供一点深度以增强此效果。两个phantom
子节点用于帮助对齐树的最终节点,并且由于此节点有四个父节点,因此在树完成后添加与第一个节点的连接线。
\documentclass[border=5pt]{standalone}
\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\LARGE, text width=325pt, text centered, minimum height=10pt, outer color=col7out, inner color=col7in},
oellip/.append style={ellip, inner color=col8in, outer color=col8out, 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};
},
}
}{},
}
[Compressed Sensing\\Theory, inner color=col1in, outer color=col1out
[Projection Matrix\\Theory, inner color=col2in, outer color=col2out
[Optimise Projection\\Matrix, inner color=col4in, outer color=col4out]
[Reduce Number of\\Measurements, inner color=col4in, outer color=col4out]
]
[Reconstruction\\Algorithms, inner color=col3in, outer color=col3out
[Convex Relaxation
[Sparse Signal\\Estimate, rect, name=sse1
]
]
[Greedy Pursuits
[Sparse Signal\\Estimate, rect, name=sse2
]
]
[, phantom, calign with current
[A\\B, phantom
[Our Work, orect, name=us
[{Improved Sparse Signal Estimate!}, oellip
]
]
]
]
[Non-Convex\\Minimisation Methods
[Sparse Signal\\Estimate, rect, name=sse3
]
]
[Combinatorial\\Algorithms
[Sparse Signal\\Estimate, 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}
答案2
看看这里: Texample - 简单流程图
所需的库,如本例所示\usetikzlibrary{shapes,arrows}
。
编辑: 摘自Texample:
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
% Define block styles
\tikzstyle{decision} = [diamond, draw, fill=blue!20, text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt]
\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=5em, text centered, rounded corners, minimum height=4em]
\tikzstyle{line} = [draw, -latex']
\tikzstyle{cloud} = [draw, ellipse,fill=red!20, node distance=3cm, minimum height=2em]
\begin{tikzpicture}[node distance = 2cm, auto]
% Place nodes
\node [block] (init) {initialize model};
\node [cloud, left of=init] (expert) {expert};
\node [cloud, right of=init] (system) {system};
\node [block, below of=init] (identify) {identify candidate models};
\node [block, below of=identify] (evaluate) {evaluate candidate models};
\node [block, left of=evaluate, node distance=3cm] (update) {update model};
\node [decision, below of=evaluate] (decide) {is best candidate better?};
\node [block, below of=decide, node distance=3cm] (stop) {stop};
% Draw edges
\path [line] (init) -- (identify);
\path [line] (identify) -- (evaluate);
\path [line] (evaluate) -- (decide);
\path [line] (decide) -| node [near start] {yes} (update);
\path [line] (update) |- (identify);
\path [line] (decide) -- node {no}(stop);
\path [line,dashed] (expert) -- (init);
\path [line,dashed] (system) -- (init);
\path [line,dashed] (system) |- (evaluate);
\end{tikzpicture}
\end{document}
编辑2:在特定情况下,我的代码看起来像那样。
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,trees,calc}
\begin{document}
% Define block styles
\tikzstyle{block} = [rectangle, draw, text width=2.5cm, text centered, rounded corners, minimum height=4em,fill=blue!20]
\tikzstyle{line} = [draw,thick, -latex']
\tikzstyle{cloud} = [draw, ellipse, text width=2.5cm, text centered]
\tikzstyle{edge from parent}=[->,thick,draw]
\begin{tikzpicture}[auto,edge from parent fork down]
\tikzstyle{level 1}=[sibling distance=180mm,level distance=18ex]
\tikzstyle{level 2}=[sibling distance=55mm,level distance=24ex]
% Place nodes
\node [cloud,fill=red!40] (cst) {Compressed Sensing Theory}
child{node [cloud,fill=green!40] (pmt) {Projection Matrix Theory}
child{node [cloud,fill=green!20] (opm) {Optimize Projection Matrix}}
child{node [cloud,fill=green!20] (rnm) {Reduce Number of Measurements}}
}
child{node [cloud,fill=blue!40] (ra) {Reconstruction Algorithms}
child{node [cloud,fill=blue!20] (cr) {Convex Relaxation}}
child{node [cloud,fill=blue!20] (gp) {Greedy Pursuit}}
child{node [cloud,fill=blue!20] (ncmm) {Non-Convex Minimization Methods}}
child{node [cloud,fill=blue!20] (ca) {Combinatorial Algorithms}}
};
\node[block,yshift=-1cm,below of= cr](sse1){Sparse Signal Estimate};
\node[block,yshift=-1cm,below of= gp](sse2){Sparse Signal Estimate};
\node[block,yshift=-1cm,below of= ncmm](sse3){Sparse Signal Estimate};
\node[block,yshift=-1cm,below of= ca](sse4){Sparse Signal Estimate};
\node[below of= ra,yshift=-8cm,rectangle, draw, text width=16cm, text centered, rounded corners, minimum height=3em,fill=orange!40](ow){Our Work};
\node[below of= ow,yshift=-1cm,rectangle, draw, text width=8cm, text centered, rounded corners, minimum height=3em,fill=orange!20](isse){Improve Sparse Signal Estimate};
%% Draw edges
\path [line] (cr.south) -- (sse1.north);
\path [line] (gp.south) -- (sse2.north);
\path [line] (ncmm.south) -- (sse3.north);
\path [line] (ca.south) -- (sse4.north);
\path [line] (sse1)--($(sse1.south)-(0,0.5)$) -| (ow.175);
\path [line] (sse2)--($(sse2.south)-(0,0.5)$) -| (ow.150);
\path [line] (sse3)--($(sse3.south)-(0,0.5)$) -| (ow.30);
\path [line] (sse4)--($(sse4.south)-(0,0.5)$) -| (ow.5);
\path [line] (ow.south) -- (isse.north);
\end{tikzpicture}
\end{document}