PGFPlots can do this, using two axis environments that are positioned on top of each other. By using styles, you can very efficiently generate these charts. Once the styles precipitation and temperature have been defined, all you need to type is
\begin{tikzpicture}
\pgfplotstableread{
Month Precipitation Temperature
1 65 7
2 55 8
3 45 10
4 33 15
5 12 20
6 8 24
7 12 27
8 3 26
9 12 22
10 65 17
11 50 12
12 91 8
}\data
\begin{axis}[precipitation]
\addplot table {\data} \cycleplot;
\end{axis}
\begin{axis}[temperature]
\addplot table {\data} \cycleplot;
\end{axis}
\end{tikzpicture}
to get the following plot (note that I've also defined a new \cycleplot command that "continues" the plots to the left and right so the periodicity can be seen more clearly):

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.7}
\pgfplotsset{
precipitation/.style={
ymin=0, ymax=#1,
scale only axis,
cycle list={
black, mark=*\\
},
table/x=Month,
table/y=Precipitation,
axis y line*=left,
xtick={1,...,12},
xticklabels={Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec},
enlarge x limits={abs=0.5},
execute at end plot={\label{precipplot}},
ylabel=\ref{precipplot} Precipitation in mm
},
precipitiation/.default=100,
temperature/.style={
ymin=0, ymax=#1,
scale only axis,
cycle list={
gray, thick, mark=square*\\
},
table/x=Month,
table/y=Temperature,
axis y line*=right,
hide x axis,
enlarge x limits={abs=0.5},
execute at end plot={\label{tempplot}},
ylabel=\ref{tempplot} Temperature in C
},
temperature/.default=50
}
\newcommand\cycleplot{
(current plot end|-current plot begin) ++(axis direction cs:1,0) -- (current plot end)
(current plot begin|-current plot end) ++(axis direction cs:-1,0) -- (current plot begin)
}
\pgfplotsset{
width=10cm,
height=6cm
}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
Month Precipitation Temperature
1 65 7
2 55 8
3 45 10
4 33 15
5 12 20
6 8 24
7 12 27
8 3 26
9 12 22
10 65 17
11 50 12
12 91 8
}\data
\begin{axis}[precipitation]
\addplot table {\data} \cycleplot;
\end{axis}
\begin{axis}[temperature]
\addplot table {\data} \cycleplot;
\end{axis}
\end{tikzpicture}
\end{document}
Filling the area where the temperature curve is above the precipitation curve takes a bit of trickery: You can first draw the temperature curve and fill the whole area underneath it, then draw the precipitation curve on top, filling the area underneath it with white. Unfortunately, this will also draw over the temperature curve (not just the filled area), so you'll have to draw the precipitation curve again (this time without filling):

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.7}
\usetikzlibrary{calc}
\pgfplotsset{
precipitation/.style={
axis on top,
ymin=0, ymax=#1,
scale only axis,
cycle list={
black, mark=*,fill=white, mark options={fill=black}\\
},
table/x=Month,
table/y=Precipitation,
axis y line*=left,
xtick={1,...,12},
xticklabels={Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec},
enlarge x limits={abs=0.5},
execute at end plot={\label{precipplot}},
ylabel=\ref{precipplot} Precipitation in mm
},
precipitiation/.default=100,
temperature/.style={
ymin=0, ymax=#1,
scale only axis,
cycle list={
gray, thick, mark=square*\\
},
table/x=Month,
table/y=Temperature,
axis y line*=right,
hide x axis,
enlarge x limits={abs=0.5},
execute at end plot={\label{tempplot}},
ylabel=\ref{tempplot} Temperature in C
},
temperature/.default=50
}
\newcommand\cycleplot{
-- ($(current plot end|-current plot begin)+(axis direction cs:1,0)$) |- (rel axis cs:-0.1,-0.1)
-- ($(current plot begin|-current plot end)+(axis direction cs:-1,0)$) -- (current plot begin)
}
\pgfplotsset{
width=10cm,
height=6cm
}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
Month Precipitation Temperature
1 65 7
2 55 8
3 45 10
4 33 15
5 12 20
6 8 24
7 12 27
8 3 26
9 12 22
10 65 17
11 50 12
12 91 8
}\data
\pgfplotsset{set layers=axis on top}
\begin{axis}[temperature, hide axis]
\addplot [draw=none,fill=gray!25] table {\data} \cycleplot;
\end{axis}
\begin{axis}[precipitation]
\addplot table {\data} \cycleplot;
\end{axis}
\begin{axis}[temperature]
\addplot table {\data} \cycleplot;
\node at (rel axis cs:0.55,0.28) {Dry season};
\end{axis}
\end{tikzpicture}
\end{document}