Latex, PgfPlots - Remplissage des aires sous et entre les courbes

Logo

Introduction

Dans certaines circonstances, les aires doivent être mises en évidence. Comment réaliser le remplissage des aires avec Latex et le package PgfPlots ?

$$ A = \int_{-2}^0 \left[f(x) -g(x)\right] \ dx + \int_{0}^2 \left[g(x) -f(x)\right] \ dx = 24 $$
Graphiques bruts

Dans le graphique ci-dessus, on veut remplir les aires entre les 2 courbes. Le code Tex pour les 2 graphiques dans un environnement tikzpicture est le suivant :

\documentclass[tikz]{standalone}

\usepackage{pgfplots}
\usepackage{amsmath,amssymb,amsfonts}
\usepgfplotslibrary{fillbetween}

\begin{document}

  \begin{tikzpicture}

   \begin{axis}[ 
   		xmin=-3, xmax=3, 
   		ymin=-10, ymax=10, 
   		xtick distance=1, ytick distance=4 ]
      
      \addplot [domain=-2.5:2.5, samples=100, thick, color=red!50]
        {3*x^3 - x^2 - 10*x};
        
      \addplot [domain=-2.5:2.5, samples=100, thick, color=blue!50]
        {- x^2 + 2*x}; 

      \draw [dashed, opacity=0.4] (axis cs:{-2,0}) -- (axis cs:{-2,-8});
	
      \node[color=red, font=\footnotesize] at (axis cs: -1.6,7) {$f(x)=3x^3 - x^2 - 10x$};
      \node[color=blue, font=\footnotesize] at (axis cs: 1.1,2.2) {$g(x)=- x^2 + 2x$};
   	
    \end{axis}
  
  \end{tikzpicture}

\end{document}

Librairie fillbetween, aires entre 2 courbes

  • Pour remplir l’aire entre 2 courbes : importer la librairie fillbetween de PgfPlots
    \usepgfplotslibrary{fillbetween}
  • Donner un nom de chemin pour chaque tracé avec l’option name path : les chemins des courbes sont nommés f et g dans cet exemple.
    \addplot [domain=-2.5:2.5, samples=100, name path=f, thick, color=red!50]
            {3*x^3 - x^2 - 10*x};
            
    \addplot [domain=-2.5:2.5, samples=100, name path=g, thick, color=blue!50]
            {- x^2 + 2*x}; 
  • Ajouter un tracé pour remplir l’aire avec fill between [of=<nom du chemin 1> and <nom du chemin 2>]
    \addplot[red!10, opacity=0.4] fill between[of=f and g, soft clip={domain=-2:2}];
    L’option soft clip est utilisée pour restreindre le domaine.

C’est tout.

Filled area plots
\documentclass[tikz]{standalone}

\usepackage{pgfplots}
\usepackage{amsmath,amssymb,amsfonts}
\usepgfplotslibrary{fillbetween}

  \begin{tikzpicture}

   \begin{axis}[ 
   		xmin=-3, xmax=3, 
   		ymin=-10, ymax=10, 
   		xtick distance=1, ytick distance=4 ]

    \addplot [domain=-2.5:2.5, samples=100, name path=f, thick, color=red!50]
        {3*x^3 - x^2 - 10*x};
        
    \addplot [domain=-2.5:2.5, samples=100, name path=g, thick, color=blue!50]
        {- x^2 + 2*x}; 
    
    \addplot[red!10, opacity=0.4] fill between[of=f and g, soft clip={domain=-2:2}];

    \draw [dashed, opacity=0.4] (axis cs:{-2,0}) -- (axis cs:{-2,-8});
	
    \node[color=red, font=\footnotesize] at (axis cs: -1.6,7) {$f(x)=3x^3 - x^2 - 10x$};
    \node[color=blue, font=\footnotesize] at (axis cs: 1.1,2.2) {$g(x)=- x^2 + 2x$};
   	
   \end{axis}
  
  \end{tikzpicture}

\end{document}

Aires et l’axe des abcisses x

Pour remplir l’aire entre une courbe et l’axe des abcisses x, créer un nom de chemin pour l’axe des abcisses avec la commande path :

\addplot [domain=-2.5:2.5, samples=100, name path=f, thick, color=red!50]
        {3*x^3 - x^2 - 10*x};
    
\path [name path=xaxis]
      (\pgfkeysvalueof{/pgfplots/xmin},0) --
      (\pgfkeysvalueof{/pgfplots/xmax},0);
		
\addplot[red!10, opacity=0.4] fill between [of=f and xaxis, soft clip={domain=-2:2}];
Filled area plot / x-axis

Fillbetween, split. Segments d’une aire

En utilisant fill between, l’aire entre 2 courbes peut être divisée en segments en fonction de chaque intersection entre les 2 courbes. Un index est appliqué pour chaque segment d’aire. L’option split est obligatoire pour calculer les segments.

\addplot [domain=-2.5:2.5, samples=100, name path=f, thick, color=red!50]
        {3*x^3 - x^2 - 10*x};
    
\path [name path=xaxis]
		(\pgfkeysvalueof{/pgfplots/xmin},0) --
		(\pgfkeysvalueof{/pgfplots/xmax},0);

\addplot[red!10, opacity=0.4] fill between [
    of=f and xaxis, soft clip={domain=-2:2},
    split,
    every even segment/.style = {blue!20!white},
    every odd segment/.style ={green!20!white}];
Filled area plot / x-axis per segment

Dans l’exemple ci-dessus, les indexes pairs et impairs sont différemment stylisés.

Pour gérer un segment par son numéro d’index ou le dernier :

every segment no 2/.style={pattern=north east lines}
every last segment/.style={top color=orange, bottom color=blue}