我怎样才能绘制像下图这样的图形?
似乎我可以使用一些包来绘制图形,但我是新手,我不知道它们是否有局限性。
要求如下:
-开头有一个黑色实心节点
-每个节点顶部都有一个标签,底部有一个数字
- 可以是虚线或实线箭头
-底部有一个指示时间的标签。
有什么建议吗?或者我应该用一些软件画出来然后添加为图像?
答案1
如果可能的话,最好提供一个最小工作示例(MWE),向我们展示您迄今为止尝试过的方法,以便我们尝试提供符合您要求的解决方案。尽管如此,由于您也有一些一般性问题,我认为我应该提供一种可行的方法(使用TikZ
),并尝试回答您的一些一般性问题。
TikZ
是一个非常强大的绘图包,可以让你绘制几乎任何东西(见texample.net;PStricks
是另一个包,但我不太熟悉它),所以你不必用其他软件绘制这样的图像,然后将其作为图像包含。这是一种可能性,但如果你可以使用包轻松编写图像,我通常会这样做,因为包含某些文件类型的图像(例如,,,,.eps
.pdf
ETC。)在某些情况下有时会引起问题(见使用哪种图形类型:pdf 还是 eps?)。
所以无论如何,你可以在 中做到这一点TikZ
。我提供的解决方案还利用了varwidth
包,以便允许在TikZ
node
s 内换行(请参阅TikZ 节点中的手动/自动换行和文本对齐)以及TikZ
库positioning
,以便将node
s 相对于彼此放置:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{varwidth}
\begin{document}
\begin{tikzpicture}
\node [draw,circle,fill=black] (begin-node) {};
\node [below=2.5cm of begin-node] (0) {0};
\node [right=1.5cm of 0] (1) {1};
\node [right=2cm of 1] (2) {2};
\node [right=2cm of 2] (3) {3};
\node [above=0.5cm of 1,draw,circle] (F1) {\begin{varwidth}{1cm}\centering F \\ 1\end{varwidth}};
\node [above=2.5cm of F1,draw,circle] (T1) {\begin{varwidth}{1cm}\centering T \\ 1\end{varwidth}};
\node [above=0.5cm of 2,draw,circle] (F2) {\begin{varwidth}{1cm}\centering F \\ 2\end{varwidth}};
\node [above=2.5cm of F2,draw,circle] (T2) {\begin{varwidth}{1cm}\centering T \\ 2\end{varwidth}};
\node [above=0.5cm of 3,draw,circle] (F3) {\begin{varwidth}{1cm}\centering F \\ 3\end{varwidth}};
\node [above=2.5cm of F3,draw,circle] (T3) {\begin{varwidth}{1cm}\centering T \\ 3\end{varwidth}};
\draw[->] (begin-node) -- (T1);
\draw[->] (begin-node) -- (F1);
\draw[->] (T1) -- (T2);
\draw[->] (F1) -- (F2);
\draw[->] (T2) -- (T3);
\draw[->,dashed] (F2) -- (F3);
\draw[->,dashed,very thick] (F1) -- (T2);
\draw[->,dashed,thick] (T2) -- (F3);
\end{tikzpicture}
\end{document}
答案2
TikZ 及其chains
库(也加载positioning
库)。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}
\node[circle, fill, draw, inner sep=+0pt, minimum size=2ex, alias=F-0] (A) {};
\begin{scope}[
every node/.append style={circle, align=center, draw},
every on chain/.append style={join},
every join/.append style={->},
start chain=T going right,
start chain=F going right]
\foreach \sStyle/\tText in {above right=of A/1, /2, /1}
\node[on chain=T, style/.expand once=\sStyle] {T\\\tText};
\begin{scope}[nodes={on chain=F}]
\node [below right=of A] {F\\1};
\node {F\\2};
\path[every join/.append style=dashed] node {F\\3};
\end{scope}
\end{scope}
\path[->] (A) edge (T-1) edge (F-1);
\path[->, dashed] (F-1) edge (T-2)
(T-2) edge (F-3);
\node[below=.5cm of F-3] (3) {3};
\foreach \cnt in {0,1,2}
\node at (F-\cnt |- 3) {\cnt};
\end{tikzpicture}
\end{document}