I'm looking to reproduce a diagram using the tikz package from a paper in JASA: Moodie et al 2009 104(485):155-65. This is the figure:

enter image description here

The nodes and arrows don't seem too difficult to generate. But I'm stumped on how to put a timescale axis, and space the nodes so that they align with it. So, to make this question relevant to a more general audience, how does one put an x-axis on the bottom of a tikz diagram, and align the nodes with elements on the axis?

Here's a starting example for time-points 0 and 1:

\begin{tikzpicture}[line width=0.05cm]
\node [circle,draw] (h1) at (0,2) {$h$};
\node [circle,draw] (h2) at (2,2) {$h$};

\node [circle,draw] (b1) at (1.5,4) {$b$};

\begin{scope}[line width=.1cm,shorten >= 5pt, shorten <= 5pt]
\draw[->] (h1) -- (h2);
\draw[->] (h1) -- (b1);
\draw[->] (b1) -- (h2);

\draw[help lines] (0,0) grid (5,5) ;

I'm looking for what I can add to this code to get the time-axis (lines, tick marks, numbers, and title).

  • you can put the nodes on a grid. Or you could fake the timescale as nodes below the lower nodes.
    – papabravo
    Feb 14, 2014 at 14:39

2 Answers 2


Tikz knows quite a lot about repetitive jobs. Here is a shorter version of Nicos answer:

%%plot the wt nodes and timeline ticks
\foreach \x in {0,1,2,3,6,9,12} { 
  \draw (\x ,0) node[anchor=north] {\x} -- (\x,0.1);
  \node[draw,circle] (wt\x) at (\x,1) {wt};
%%plot the bt nodes and most edges
%%alternative for older tikz versions:
%\foreach[remember =\x as \lastx] \x in {1,2,3,6,9,12} {
%%works for me with current version (3.0.0)
\foreach[remember =\x as \lastx (initially 0)] \x in {1,2,3,6,9,12} {
  \node[draw,circle] (bf\lastx) at (0.5+\lastx,2) {bf};
  \path[->] (wt\lastx) edge (wt\x);
  \path[->] (wt\lastx) edge (bf\lastx);
  \path[->] (bf\lastx) edge (wt\x);
%%plot the missing edges
\foreach[remember =\x as \lastx (initially 0)] \x in {1,2,3,6,9} {
  \path[->] (bf\lastx) edge (bf\x);
\draw[->] (-.5,0) -- (12.5,0);

Edit: Added alternative version according to this.

The Result :


  • Does it compile?
    – ajeh
    Feb 14, 2014 at 15:50
  • It does for me. Maybe the remember key is new in tikz 3.0? I just learnt about it...
    – papabravo
    Feb 14, 2014 at 15:56
  • @papabravo, your approach is enticing, but there seems to be a mistake (typo?) in your code that I can't find. There is only one node for bf, and the arrows aren't quite working out. Feb 14, 2014 at 16:00
  • I should definitely learn this kind of stuff.
    – Nico
    Feb 14, 2014 at 16:10
  • Added a version that should work with the 2.1 version. Haven't tested it because I don't want to mess with my installation (I'm happy it's running...)
    – papabravo
    Feb 14, 2014 at 16:15

For something as simple as this I would KISS.

If you are a newbie like me, the simpler the better.



[node distance=4mm and 1.75mm, bubbles/.style={draw,circle, minimum size=2em}]
% Bottom
\node[bubbles] (wt0) at (0, 0) {wt};
\node[bubbles] (wt1) at (1, 0) {wt};
\node[bubbles] (wt2) at (2, 0) {wt};
\node[bubbles] (wt3) at (3, 0) {wt};
\node[bubbles] (wt6) at (6, 0) {wt};
\node[bubbles] (wt9) at (9, 0) {wt};
\node[bubbles] (wt12) at (12, 0) {wt};

% Top
\node[bubbles] (bf0) [above right=of wt0] {bf};
\node[bubbles] (bf1) [above right=of wt1] {bf};
\node[bubbles] (bf2) [above right=of wt2] {bf};
\node[bubbles] (bf3) [above right=of wt3] {bf};
\node[bubbles] (bf6) [above right=of wt6] {bf};
\node[bubbles] (bf9) [above right=of wt9] {bf};

% Arrows
\draw [-latex,thick](wt0) -- (bf0);
\draw [-latex,thick](wt0) -- (wt1);
% And so on

% Timeline
\node at (0, -1) {0};
\node at (1, -1) {1};
\node at (2, -1) {2};
\node at (3, -1) {3};
\node at (6, -1) {6};
\node at (9, -1) {9};
\node at (12, -1) {12};

enter image description here


  • Put the bottom nodes at the position you want. You can use months number like I did.
  • Put the top nodes relative to the bottom nodes (that's what it looks like in the picture you put)
  • Arrows are pretty straightforward.
  • Timeline: The nodes are in the same place as the bottom nodes.

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.