As discussed in my comments, here is my proposed solution without groupplots.
To summarize the comments, I replicate them here:
Q1: It really did not find complete axis limits (because that particular axis has no data), so it uses [0,1] x [0,1] as fallback (which should be indicated by some warning in your log file). Provide some (arbitrary, but non-empty) x range will fix the problem: xmin=0,xmax=1
Q2: you can provide \begin{axis}[options] ... \end{axis}
several times in one picture - each time with different options
and with different plots. As long as the options for dimensions (like width
), positioning (at
, xshift
, etc), and alignment (anchor
) are the same, they will be drawn on top of each other.
My proposed solution is to draw two axes completely on top of each other, and only the second y axis with an xshift
.
Here is the combined approach for your MWE:
\documentclass{article}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}
\usepgfplotslibrary{groupplots}
\begin{document}
\pgfkeys{
/pgf/number format/.cd,
set decimal separator={,{\!}},
set thousands separator={}
}
\pgfplotsset{
every axis/.append style = {
line width = 1pt,
tick style = {line width=1pt}
}
}
\begin{tikzpicture}
% --- CF: provide shared options here with pgfplotsset:
\pgfplotsset{
height=5cm, width=9cm,
no markers
}
% this is the leftmost y axis
\begin{axis}[
xmin=0,xmax=1,%--- CF
xshift=-1.8cm,%-- CF
width=2cm,
hide x axis,
axis y line*=left,
ymin=0, ymax=10,
ytick = {0,1,...,10},
ylabel={\color{red}$y_2$}
]
\end{axis}
% this is the red curve
\begin{axis}[
xmin=0, xmax=10,
xlabel={$x$},
ymin=0, ymax=100,
ytick = {0,20,...,100},
ylabel={\color{blue}$y_1$}
]
\addplot[very thick, blue, domain=0:10] {x^2};
\end{axis}
% this is the blue curve
\begin{axis}[
xmin=0, xmax=10,
ymin=0, ymax=10,
hide x axis,
hide y axis,
]
\addplot[very thick, red, domain=0:10] {0.05*x^2};
\end{axis}
\end{tikzpicture}
\end{document}
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}
Best Answer
Another option is using the
visible on
style:An animation of the result:
Note that if you want to show the same graph on multiple slides seperated by comma, you must write the argument in curly brackets:
{<1,3>}