Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I've two times series (y_h, y_f) with a lower and upper bound (confidence interval). I'd like to plot all of them on the same picture. I've succeeded in plotting y_h with upper and lower bounds, but i fail when i add y_f and its bounds. (btw I want to fill in grey between the upper and lower bound) I can't find the trick to make it work, i'd be very pleased if anyone had the solution.

\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
    \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!20, draw opacity=0, area legend]   table [x=temps, y expr=\thisrow{y_h__sup}-\thisrow{y_h__inf}]   {\table} \closedcycle;
    \addplot [stack plots=false, very thick,smooth,blue]  table [x=temps, y=y_h]   {\table};

    % y_f
    \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!20, draw opacity=0, area legend]   table [x=temps, y expr=\thisrow{y_f__sup}-\thisrow{y_f__inf}]   {\table} \closedcycle;
    \addplot [stack plots=false, very thick,smooth,blue]  table [x=temps, y=y_f]   {\table};
    \end{axis}

\end{tikzpicture}
\end{document}

1 time serie2 time series on same graph

share|improve this question
add comment

1 Answer

up vote 7 down vote accepted

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}
share|improve this answer
    
Thanks you very very much for the detailed explanations, it works like a charm ! I did not notice that second interval was stacking on the first interval. –  gVermandel Feb 6 '13 at 8:10
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.