This happens because PGFPlots only uses one "stack" per axis: You're stacking the second confidence interval on top of the first. The easiest way to fix this is probably to use the approach described in "Is there an easy way of using line thickness as error indicator in a plot?": After plotting the first confidence interval, stack the upper bound on top again, using stack dir=minus
. That way, the stack will be reset to zero, and you can draw the second confidence interval in the same fashion as the first:
\documentclass{standalone}
\usepackage{pgfplots, tikz}
\usepackage{pgfplotstable}
\pgfplotstableread{
temps y_h y_h__inf y_h__sup y_f y_f__inf y_f__sup
1 0.237340 0.135170 0.339511 0.237653 0.135482 0.339823
2 0.561320 0.422007 0.700633 0.165871 0.026558 0.305184
3 0.694760 0.534205 0.855314 0.074856 -0.085698 0.235411
4 0.728306 0.560179 0.896432 0.003361 -0.164765 0.171487
5 0.711710 0.544944 0.878477 -0.044582 -0.211349 0.122184
6 0.671241 0.511191 0.831291 -0.073347 -0.233397 0.086703
7 0.621177 0.471219 0.771135 -0.088418 -0.238376 0.061540
8 0.569354 0.431826 0.706882 -0.094382 -0.231910 0.043146
9 0.519973 0.396571 0.643376 -0.094619 -0.218022 0.028783
10 0.475121 0.366990 0.583251 -0.091467 -0.199598 0.016664
}{\table}
\begin{document}
\begin{tikzpicture}
\begin{axis}
% y_h confidence interval
\addplot [stack plots=y, fill=none, draw=none, forget plot] table [x=temps, y=y_h__inf] {\table} \closedcycle;
\addplot [stack plots=y, fill=gray!50, opacity=0.4, draw opacity=0, area legend] table [x=temps, y expr=\thisrow{y_h__sup}-\thisrow{y_h__inf}] {\table} \closedcycle;
% subtract the upper bound so our stack is back at zero
\addplot [stack plots=y, stack dir=minus, forget plot, draw=none] table [x=temps, y=y_h__sup] {\table};
% y_f confidence interval
\addplot [stack plots=y, fill=none, draw=none, forget plot] table [x=temps, y=y_f__inf] {\table} \closedcycle;
\addplot [stack plots=y, fill=gray!50, opacity=0.4, draw opacity=0, area legend] table [x=temps, y expr=\thisrow{y_f__sup}-\thisrow{y_f__inf}] {\table} \closedcycle;
% the line plots (y_h and y_f)
\addplot [stack plots=false, very thick,smooth,blue] table [x=temps, y=y_h] {\table};
\addplot [stack plots=false, very thick,smooth,blue] table [x=temps, y=y_f] {\table};
\end{axis}
\end{tikzpicture}
\end{document}
You simply need to adjust the height of the color bar
plot.
This can easily be accomplished by doing:
every colorbar/.append style={height=<height specification>}
However, often you will use different heights for different groupplots.
Therefore a more general approach would be:
every colorbar/.append style={height=
2*\pgfkeysvalueof{/pgfplots/parent axis height}+
\pgfkeysvalueof{/pgfplots/group/vertical sep}
}
The first key /pgfplots/parent axis height
is the height of the actual contour plot (of which you attach the colorbar).
The second key /pgfplots/group/vertical sep
is the spacing in between the two group plots. This needs to be adjusted by the number of lower lying plots, in this case only one.
So the above takes and makes the colorbar plot have a height equal to 2 plots plus the vertical separation of the plots. Furthermore it is generic if you change height and vertical sep, etc.
However, notice that if the plots have different heights the above approach will not work.
Ok, so one thing is that you only need to plot the colorbar once. Groupplots ensure that each statement in the groupplot
environment will be added to every sub-plot. Hence you simply need to put the colorbar in the top \nextgroupplot
. The colorbar is aligned at the top right corner of the parent axis, hence you should do it to the top plot.
So:
\nextgroupplot[colorbar right,
every colorbar/.append style={height=
2*\pgfkeysvalueof{/pgfplots/parent axis height}+
\pgfkeysvalueof{/pgfplots/group/vertical sep}}]
A thing to be very careful about when attaching colorbars to several contours is to ensure the bounds of the contour to be the same for both, hence I would recommend you to also add point meta min=<value>
and point meta max=<value>
. Please do remember this! :)
Ok, so the final groupplots
is something like this:
\begin{tikzpicture}
\begin{groupplot}[view={0}{90},
xlabel=$x$,
ylabel=$y$,
height=3cm,
point meta min=-1.5,
point meta max=1.5,
group/xlabels at = edge bottom,
group style = {group size = 1 by 2,
xlabels at = edge bottom
}]
\nextgroupplot[colorbar right,
every colorbar/.append style={height=
2*\pgfkeysvalueof{/pgfplots/parent axis height}+
\pgfkeysvalueof{/pgfplots/group/vertical sep}}]
\addplot3[surf] {sin(36*x)};
\nextgroupplot
\addplot3[surf] {cos(36*y)};
\end{groupplot}
\end{tikzpicture}
This will result in:
Best Answer
You can use the
every plot/.style
key to enter the common settings in that group