Many investent fund factsheets have a simple risk diagram as below, along with the annotation:

enter image description here

How would one recreate this in TeX? I though of using a table but perhaps some sort of tikz picture might be better. Being very new to TeX I am unsure of where to begin.

3 Answers 3


One possibility, using a TikZ's matrix of math nodes:




  matrix of math nodes,
  row sep=-\pgflinewidth,
    text width=1cm,
    minimum height=30pt
  ] (mat)
    1 & 2 & |[fill=myblue,font=\color{white}]|3 & 4 & 5 & 6 & 7 \\
  ([yshift=20pt]mat-1-1.north west) 
    node[anchor=north west,font=\scriptsize,inner xsep=0pt] {Lower Reward Potential}
    node[anchor=south west,font=\scriptsize,inner xsep=0pt] {Lower Risk}
  ([yshift=20pt]mat-1-7.north east)
    node[anchor=north east,font=\scriptsize,inner xsep=0pt] {Higher Reward Potential}
    node[anchor=south east,font=\scriptsize,inner xsep=0pt] {Higer Risk}


enter image description here

  • 2
    Amazing job. And exactly like my example. Many thanks
    – harryg
    Mar 3, 2015 at 15:48

Two TikZ-free options:

  1. First, using some defined boxes and \xleftrightarrow:

    {\scriptsize Lower Risk\hfill Higher Risk\par\vskip-1.5ex}
    {\scriptsize Lower Reward Potential\hfill Higher Reward Potential\par\medskip}

    enter image description here

  2. Second, using a tabular and \xleftrightarrow:

    {\scriptsize Lower Risk\hfill Higher Risk\par\vskip-3.5ex}
    {\scriptsize Lower Reward Potential\hfill Higher Reward Potential\par\medskip}
    } \\[-3ex]
    1 & 2 &\cellcolor{myblue}\textcolor{white}{3} & 4 & 5 & 6 & 7 \\

    enter image description here


Another option: MetaPost, here in a LuaLaTeX program.

Here N gives the number of boxes, n the box which must be filled, len and h are the dimensions of a box. To be adapted at will.

n := 3; N := 7; len := 2cm; h := 1.5cm;
    path box; box = origin -- (len, 0) -- (len, h) -- (0, h) -- cycle;
    draw subpath (3, 4) of box;
    for i = 1 upto N:
        draw image(
            if i <> n:
                draw subpath (0, 3) of box;
                label("{\huge" & decimal i & "}", center box);
                fill box withcolor \mpcolor{myblue}; draw box;
                label("{\huge" & decimal i & "}", center box) withcolor white;
            fi) shifted ((i-1)*len, 0);
    pair arrow_offset; arrow_offset := (0, h + \mpdim{1.5\bigskipamount});
    path arrow; arrow = (origin -- N*len*right) shifted arrow_offset; drawdblarrow arrow;
    labeloffset := 0bp; pair offset; offset = (0, 4bp);
    label.lrt("Lower Reward Potential", point 0 of arrow) shifted -offset;
    label.llft("Higher Reward Potential", point 1 of arrow) shifted -offset;
    label.urt("Lower Risk", point 0 of arrow) shifted offset;
    label.ulft("Higher Risk", point 1 of arrow) shifted offset;  
    setbounds currentpicture to boundingbox currentpicture enlarged 3mm;

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .