I have the following diagram which (or a nicer looking version of which) I'd like to recreate using TikZ. Can anybody point me into the right direction? How do I do the concentric circles? How the curves?

Image I'd like to reproduce with TikZ

  • 4
    Welcome to TeX.SX! Have a look at the TikZ-PGF manual: the introductory tutorials have basically everything you need to draw the graph. – Pier Paolo Jun 26 '14 at 19:41
  • First locate the manual. Create a shortcut (link) and put it into a convenient folder with the rest of the manuals. Then RTFM. Search for circle, arc and to-style. – John Kormylo Jun 27 '14 at 2:52

This is an attempt. concentric circles are drawn first then draw the freehand curves via two skills. Texts are placed by nodes. Polar coordinates are used mostly for ease of positioning around circles

(A) edge [in=xx,out=xx] (B) where xx= angle
(A) .. controls (aux1) and (aux2) .. (B)

enter image description here




\foreach \r in {0.5,1,...,2}{
\draw (0,0) circle (\r cm);
\draw[very thick] (0,0)node[](A){$w_0$} circle(1cm)node[yshift=-0.8cm,inner sep=0pt,outer sep=0pt](B){$\bullet$}; 
\draw[very thick] (-43:2cm) edge[out=120,in=60] (-137:2cm) node[xshift=-1.5cm]{good weather};
\node at (90:1.8cm){cold sun};\draw[dashed,very thick] (90:2.5cm) edge[out=-10, in=0, looseness=3] ([yshift=1cm]175:2.5cm);
\draw[] (4,1)node[above]{A bumper crop here?} .. controls (0,0) and (8,1) .. (B);


To do the concentric circles, you can draw a bunch of circles with the same center and different radius:

\foreach \i in {1,2,..., 5}{\draw (0,0) circle (\i cm);}

Alternately, since you want one thick, you can do a sequence of circles:

\node[circle] (A) at (0,0) {$w_0$};
\draw (0,0) circle (1 cm);
\draw[ultra thick] (0,0) circle (2 cm);
\draw (0,0) circle (3 cm);

and then work on drawing the curvy bits on top using \draw or \path.

I'm really fond of using to to get curves. E.g.,

\draw (-1,0) to[in = 0, out =180] (3,0) to[bend left = 30] (4,3);

There are also other curvy connectors like parabola and sin that you can use to make things wiggle.

You can use node {text} to put in the text.

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.