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.

How to accomplish fill between two curves in pgfplots? For example, I have

...
\addplot coordinates {(0,1) (1,1)};
\addplot file {something.dat};
...

and I would like to have filling between those curves.

share|improve this question

2 Answers 2

up vote 25 down vote accepted
+50

You can use the \pgfplotstablevertcat command to add the coordinates to your data and then just use the fill option when plotting:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}

\begin{tikzpicture}

% Load the data
\pgfplotstableread{data.dat}\data

% Input the coordinates for the fill boundary, sort them from highest to lowest x value
\pgfplotstablesort[sort cmp={float >}]\coordinates{
0 0
1 1
}

% Concatenate the two series
\pgfplotstablevertcat{\filledcurve}{\data}
\pgfplotstablevertcat{\filledcurve}{\coordinates}


\begin{axis}
% Plot the concatenated tables
\addplot[fill=gray!40,draw=none] table {\filledcurve};

% Plot the data and the coordinates for reference
\addplot[blue,mark=*,line width=2pt] table {\data};
\addplot[orange,mark=*,line width=2pt] table {\coordinates};
\end{axis}
\end{tikzpicture}

\end{document}

My datafile "data.dat" looks like this

0 2
0.5 -1
1 3

Yielding the following output:

Filling the area between two curves using pgfplots

share|improve this answer
    
Thanks for your answer! –  user1996 Jan 6 '11 at 9:56

Version 1.10 of pgfplots has been released just recently, and it comes with a new solution for the problem to fill the area between plots.

Note that the old solution is still possible and still valid; this here is merely an update which might simplify the task. In order to keep the knowledge base of this site up-to-date, I present a solution based on the new fillbetween library here:

enter image description here

\documentclass{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.10}
\usepgfplotslibrary{fillbetween}
\begin{document}

\begin{tikzpicture}

\begin{axis}
\addplot[name path=A,blue,mark=*,line width=2pt] table {
0 2
0.5 -1
1 3
};
\addplot[name path=B,orange,mark=*,line width=2pt] coordinates  {(0,0) (1,1)};

\addplot[gray!40] fill between[of=A and B];

\end{axis}
\end{tikzpicture}

\end{document}

The solution relies on \usepgfplotslibrary{fillbetween} which activates the syntax \addplot fill between[of=<first> and <second>]. The style for the filled region is given in the option list as usual, it is gray!40. Note that the fill between segment will automatically be drawn on a separate layer, i.e. it is behind the main paths. Note that fill between is independent of the sampling density, the input type, and even the plot handler of the two input paths.

share|improve this answer

Your Answer

 
discard

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