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}
I really don't know why but this works for me
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot {x*x};
\draw [ultra thick, dotted, draw=brown]
(current axis.left of origin) --
(current axis.right of origin);
\draw [ultra thick, draw=red]
($(current axis.left of origin)-(axis cs:0,-12)$) --
($(current axis.right of origin)+(axis cs:0,12)$);
\end{axis}
\end{tikzpicture}
\end{document}
Best Answer
There are a lot of "domain" options in
pgfplots
. The one which you are asking about is simplydomain
, which specifies what values ofx
(you don't need the backslash if you're usingpgfplots
) are used in plotting; by default, we havedomain = -5:5
, which is what the author apparently thinks is reasonable for typical graphs. There is a correspondingy domain
for two-variable functions.This domain is quite different from the limits established by
xmin
andxmax
. Whiledomain
is set per-plot, these keys are set per-axis and just confine the actual drawing to these limits. There are correspondingymin
andymax
. These will be computed automatically bypgfplots
if they are not given, but it is necessary for a really polished picture to set them yourself. Note thaty domain
does not have anything to do withymin
andymax
in a plot of one-variable functions, because it determines the inputs of the non-existent variabley
. Instead,ymin
andymax
, if they were determined automatically, would be calculated from the values output by your plotted functions across thedomain
.There are more! My favorites are
restrict x to domain
andrestrict y to domain
, which are filters with the same input syntax asdomain
. These don't determine what numbers are used in the variables; they determine what values are used in the plot. They are enormously helpful with parametric or uncontrollable functions; i.e.\addplot {1/x};
will, with the defaultdomain = -5:5
, produce a rather hideous asymptote atx = 0
as well as (with the defaultymin
andymax
) a badly distorted view of the axes. But settingrestrict y to domain = -5:5
in this plot will simply eliminate the large values, removing the asymptote and also scaling the picture back to a proportional square.Or, alternatively, a parametric plot such as
\addplot ({exp(x)},{exp(-x)});
(a funny way of drawing the same thing in the first quadrant alone), which is hard to tune directly because of the logarithmic connection between values on the plot and values of the variable. For this, both the defaultdomain
and the default axis sizes are inappropriate; I usually leavedomain
as it is (which gives numbers that are too huge in both coordinates) and then setrestrict x to domain
andrestrict y to domain
accordingly to trim the picture nicely. This is not to say it's a good idea to be completely oblivious todomain
, since those points are computed...just not used.These filter keys are different from the min and max keys because they actually ignore the filtered-out values, rather than simply cutting them out of the picture. This is essential if these values are larger than TeX is capable of computing with.
Finally, there are
samples
orsample at
, which latter exists mutually exclusively withdomain
and say how many, or even exactly at which values ofx
to compute values. This can be an alternative to therestrict to domain
keys, if you choose the samples carefully to avoid exceptional inputs. They are also useful for tuning the plot around rapidly-varying places in the graph, which would otherwise look rather choppy. These also interact with therestrict to domain
keys in the sense that with, say,there will be exactly 11 points evaluated, namely
({exp(-5)},{exp(5)})
through({exp(5)},{exp(-5)})
, but only those with both coordinates in the interval[-1,1]
will be plotted. Unfortunately, the only point with that property is({exp(0)},{exp(0)}) = (1,1)
, so your plot will be rather vacant. The un-plotted points are not even used to anchor interpolating curves! So the filter keys are not a panacea.My pictures tend to set all of these keys, since they each affect the drawing differently.