Dans ce post je montre comment utiliser des fonctions que j'ai écrites pour calculer des aires:

  • entre deux courbes
  • entre une courbe et une droite horizontale

Cela peut être utile si vous travaillez sur des profils spatiaux qui évoluent au cours du temps (profil topographique par exemple) et que vous souhaitez calculer un bilan (sédimentaire par exemple) entre ces profils.

Données d'exemple et script à télécharger

Considérons le jeu de données disponible ici:

##      x1        y1       x2        y2
## 1   1.2  9.507026 1.361827  4.302504
## 2   2.3  5.560263 2.417920  8.182361
## 3   2.9  8.612543 3.235110  8.820354
## 4   4.1  7.246200 3.880343  3.957040
## 5   4.8  6.759984 4.420467 10.003717
## 6   6.0 10.886095 5.044396  9.149287
## 7   7.1  6.964175 6.714750  4.536769
## 8   7.7  7.736687 7.272723  4.530298
## 9   9.0  9.254905 8.441166  5.371384
## 10 10.2  8.767844 9.726646  5.634150

Dans la suite de ce post je vais utiliser une fonction que j'ai appelée area_between, qui fait partie du package riverbed, disponible ici

Vous pouvez installer ce package sur R depuis le dépôt en ligne GitHub, en exécutant les commandes suivantes:

plot(x1,y1,type="b", 
     xlim=c(min(c(x1,x2)),max(c(x1,x2))),
     ylim=c(min(c(y1,y2)),max(c(y1,y2))),
     xlab="x", ylab="y")
points(x2,y2, type="b", lty=2)

Le graphe suivant représentant les deux séries de données : (x1,y1) en trait plein, (x2,y2) en trait pointillé.

Comment utiliser la fonction area_between?

La fonction area_between a plusieurs options disponibles. On peut par exemple indiquer plot=T pour obtenir la représentation graphique des séries considérées et de l'aire calculée. L'option type permet de préciser si l'on souhaite afficher les surfaces dans le cas où une courbe est au dessus de l'autre ou le contraire. L'option col permet de préciser de quelle couleur on veut afficher la surface entre les courbes.

Calculer l'aire entre deux courbes:

layout(matrix(1:3, nrow=3))
result=area_between(x1,y1,x2,y2, plot=T, col=c("blue","red"))
result=area_between(x1,y1,x2,y2, plot=T, col="blue", type="upper")
result=area_between(x1,y1,x2,y2, plot=T, col="red", type="lower")

  • L'aire en bleu (positive; type "upper") correspond aux zones où y1 est au dessus de y2.
  • L'aire en rouge (négative; type "lower") correspond aux zones où y1 est en dessous de y2

result=area_between(x1,y1,x2,y2, plot=FALSE, col=c("blue","red"))
result$area

## [1] 13.71704

result$area_lower

## [1] -3.342189

result$area_upper

## [1] 17.05923

Vous remarquez que l'aire result$area est égale au bilan result$area_upper+result$area_lower.

Calculer une aire entre une courbe et une droite horizontale:

La fonction area_between a aussi une option qui permet de comparer une série de données (x1,y1) à une droite horizontale:

Ici par exemple, on calcule l'aire entre la courbe et la droite horizontale d'équation y=8.5.

result=area_between(x1,y1,h=8.5, plot=T, col="light blue", type="lower")