80

I'm drawing a automaton figure, and I want to name it says 'M1' below the figure? A minimal example would be greatly appreciated. Thank you.

\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto] 
    \node[state,initial]    (q_0)                   {$q_0$}; 
    \node[state,accepting]  (q_1)   [right=of q_0]  {$q_1$}; 
    \node[state]            (q_2)   [right=of q_1]  {$q_2$}; 

    \path[->]
    (q_0) edge                  node {a}            (q_1)
    (q_1) edge                  node {$\lambda$}    (q_2)
    (q_2) edge  [bend right]    node {$\lambda$}    (q_0)
    ; %end path 
\end{tikzpicture}
  • Do you need a real caption like for figures with a running counter or just some text below it? You self-answer lets me goes it's the second case. In the first case should the pictures be labeled on their own, independent from the figures? – Martin Scharrer Jul 24 '11 at 21:20
  • The text below a picture is what I needed, as provided in my answer. The reason that I used the word caption is because I googled and found that. I thought it was similar to a caption for a picture. There are two pictures being drawn next to each other, so I think the text solution is easier to manage in this particular situation. Nonetheless, I would agree with you on the first solution for a true caption for a picture. – Chan Jul 24 '11 at 21:24
124

Just include your code in a figure environment. In that way you'll be able to add a caption to it as a normal figure:

\begin{figure}
\centering
\begin{tikzpicture}
<code>
\end{tikzpicture}
\caption{M1} \label{fig:M1}
\end{figure}
  • 4
    Thank you for your quick response. However the picture position changes accordingly, it moves to the bottom of the page :(. – Chan Jul 24 '11 at 20:18
  • 4
    @Chan: Everything with caption should usually be a floating object, i.e. it should be automatically moved to the typographically most sensible position. That is what figure does. If you really don't want a float, then have a look at tex.stackexchange.com/questions/7210/…. – Caramdir Jul 24 '11 at 20:29
  • 2
    @Caramdir: Thank you. In fact, I've just found a more elegant solution in the TikZ manual by using an extra \node with text. Unfortunately, the compiler was freeze for some reasons. – Chan Jul 24 '11 at 20:33
  • 10
    If you don't like the position of the figure you can specify it in the optional argument of the figure environment like that: \begin{figure}[t]. Instead of t (top) you can use b (bottom), p (new page of floats) or h (here) or a combination of them. All of these options works well if LaTeX thinks that the result would be typographically correct. – Spike Jul 25 '11 at 7:22
  • 2
    If you don't want it to move then try\begin{figure}[H] where [H] is Hold Here – 3kstc May 14 '18 at 4:08
14

This is my solution using an extra node with text, it works pretty well.

\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto]
        \node[state,initial]    (q_1)                           {$q_1$}; 
        \node[state,accepting]  (q_2)   [right=of q_1]          {$q_2$}; 
        \node[state]            (q_3)   [below right=of q_1]    {$q_3$}; 

        \path[->]
        (q_1) edge  [bend left]     node {a}            (q_2)
        (q_1) edge  [loop above]    node {b}            (q_1)
        (q_2) edge  [bend left]     node {a,b}          (q_3)
        (q_3) edge  [bend left]     node {a}            (q_2)
        (q_3) edge  [bend left]     node {b}            (q_1);

        \node [below=1cm, align=flush center,text width=8cm] at (q_3)
        {
            $M_1$
        };
\end{tikzpicture}
  • 2
    The problem with your solution is that, when you want to included a figure with a caption that is not a tikz picture, the caption might be laid out quite differently, especially if your publisher has his/her own style for captions in a class or package file. For consistency of captioning, Spike's solution is my strong preference. – Benjamin McKay Dec 23 '14 at 21:06
  • 1
    how do I label this one?? – David Feb 12 '15 at 17:49
4

I've a similar solution using caption:

\usepackage{caption}  

where in a beamer slide I would add caption via:

\captionof{figure}{\textbf{Confusion Matrix}}

as in:

\begin{frame}[fragile]
\frametitle{Confusion Matrix}
\begin{tikzpicture}[
box/.style={draw,rectangle,minimum size=2cm,text width=1.5cm,align=left}]
\matrix (conmat) [row sep=.1cm,column sep=.1cm] {
\node (tpos) [box,
    label=left:\( \mathbf{p'} \),
    label=above:\( \mathbf{p} \),
    ] {True \\ positive};
&
\node (fneg) [box,
    label=above:\textbf{n},
    label=above right:\textbf{total},
    label=right:\( \mathrm{P}' \)] {False \\ negative};
\\
\node (fpos) [box,
    label=left:\( \mathbf{n'} \),
    label=below left:\textbf{total},
    label=below:P] {False \\ positive};
&
\node (tneg) [box,
    label=right:\( \mathrm{N}' \),
    label=below:N] {True \\ negative};
\\
};
\node [left=.05cm of conmat,text width=1.5cm,align=right] {\textbf{actual \\ value}};
\node [above=.05cm of conmat] {\textbf{prediction outcome}};
\end{tikzpicture}
\captionof{figure}{\textbf{Confusion Matrix}}
\end{frame}

Preview

slide with caption and confusion matrix


Simplified

For readability, without tikz code:

\begin{frame}[fragile]
\frametitle{Confusion Matrix}
\begin{tikzpicture}[
% ... tikz ...
\end{tikzpicture}
\captionof{figure}{\textbf{Confusion Matrix}}
\end{frame}

The confusion matrix code comes from this answer.

  • 2
    Should be the top answer, simple single-line command. Maybe remove all of that extraneous confusion matrix code, since it's just obscuring the (correct) answer? – Jonathan Simon Dec 6 '18 at 21:06
  • How can get rid of the number of the figure? – pushpen.paul Aug 30 at 5:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.