1.2 Nuage de points

Dès que vous commencez à maîtriser les principes de base de R, vous allez pouvoir réaliser assez rapidement de beaux graphiques. Par exemple, si vous souhaitez représenter une variable numérique en fonction d’une autre variable numérique, vous pouvez exprimer cela sous la forme d’une formule3

\[y \sim x\]

que l’on peut lire “y en fonction de x”. Pour les deux variables numériques x et y, la représentation graphique la plus classique est le nuage de points (voir Fig. 1.1 pour un exemple).

Exemple de graphique en nuage de points. Des éléments essentiels sont ici mis en évidence en couleurs (voir texte). \label{np_intro}

Figure 1.1: Exemple de graphique en nuage de points. Des éléments essentiels sont ici mis en évidence en couleurs (voir texte).

Les éléments indispensables à la compréhension d’un graphique en nuage de points sont mis en évidence à la Fig. 1.1 :

  • Les axes avec les graduations (en rouge),
  • Les labels et les unités des axes (en bleu).
  • Les points représentant les différentes observations (en gris).

Les instructions dans R pour produire un tel graphique en nuage de points sont les suivantes :

  • Préparation de l’environnement, importation et visualisation des données sous forme de tableau synthétique pour commencer.
# Chargement de SciViews::R
SciViews::R
# Importation du jeu de données
urchin <- read("urchin_bio", package = "data.io", lang = "fr")
# Visualisation des premières et dernières lignes du jeu de données
tabularise$headtail(urchin, auto.labs = FALSE)

origin

diameter1

diameter2

height

buoyant_weight

weight

solid_parts

integuments

dry_integuments

digestive_tract

dry_digestive_tract

gonads

dry_gonads

skeleton

lantern

test

spines

maturity

sex

Fishery

9.9

10.2

5.0

0.5215

0.4777

0.3658

0.0525

0.0079

0.0000

0.0000

0.1793

0.0211

0.0587

0.0995

0

Fishery

10.5

10.6

5.7

0.6418

0.5891

0.4447

0.0482

0.0090

0.0000

0.0000

0.1880

0.0205

0.0622

0.1053

0

Fishery

10.8

10.8

5.2

0.7336

0.6770

0.5326

0.0758

0.0134

0.0000

0.0000

0.2354

0.0254

0.0836

0.1263

0

Fishery

9.6

9.3

4.6

0.3697

0.3438

0.2661

0.0442

0.0064

0.0000

0.0000

0.0630

0.0167

0.0180

0.0283

0

Fishery

10.4

10.7

4.8

0.6097

0.5587

0.4058

0.0743

0.0117

0.0000

0.0000

0

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

Farm

16.7

17.2

8.5

0.5674

2.4300

2.2900

1.8400

1.02

0.1661

0.0229

0.0215

0.0034

0.9046

0.0750

0.3399

0.4896

0

Farm

16.5

16.5

7.9

0.5472

2.3200

2.1800

1.8000

1.01

0.0977

0.0147

0.0253

0.0051

0.8965

0.0908

0.3189

0.4868

0

Farm

16.8

16.7

8.2

0.4864

2.2200

2.1300

1.6300

0.88

0.1704

0.0208

0.0154

0.0020

0.7714

0.0877

0.2961

0.3876

0

Farm

17.3

17.2

8.5

0.4864

2.5200

2.3400

1.7200

0.89

0.1444

0.0167

0.0237

0.0032

0.7938

0.0772

0.3077

0.4090

0

Farm

17.0

16.6

7.9

0.4357

2.0500

1.9800

1.4300

0.83

0.1462

0.0212

0.0266

0.0051

0.7421

0.0723

0.2689

0.4009

0

First and last 5 rows of a total of 421

  • Réalisation du graphique en nuage de points proprement dit.
chart(data = urchin, height ~ weight) +
  geom_point()
Taille (hauteur du test) d'oursins en fonction de leur masse.

Figure 1.2: Taille (hauteur du test) d’oursins en fonction de leur masse.

La fonction chart() n’est pas accessible dans R de base, mais l’extension chargée grâce à l’instruction SciViews::R rend cette fonction disponible. Elle requiert comme argument le jeu de donnée (data = urchin, c’est un objet qui s’appelle un “data frame” dans le langage de R), ainsi que la formule à employer dans laquelle vous avez indiqué le nom des variables que vous voulez sur l’axe des ordonnées à gauche et des abscisses à droite de la formule, les deux parties étant séparées par un “tilde” (~). Vous voyez que le jeu de données contient beaucoup de variables (les titres des colonnes du tableau en sortie). Parmi toutes ces variables, nous avons choisi ici de représenter height en fonction de weight, la hauteur en fonction de la masse des oursins. Jusqu’ici, nous avons spécifié ce que nous voulons représenter, mais pas encore comment (sous quelle apparence), nous voulons les matérialiser sur le graphique. Pour un nuage de points, nous voulons les représenter sous forme de … points ! Donc, nous devons ajouter la fonction geom_point() pour indiquer cela.

À vous de jouer !

Note : la vidéo ci-dessous vous expliquant la création du nuage de points dans R sur le jeu de données urchin est affublée du signe “H5P”, ce qui signifie qu’elle contient également des questions auxquelles vous devez répondre dans le cadre de votre progression dans la matière.

h5p

Autoévaluez maintenant vos acquis avec le tutoriel learnr suivant.

Effectuez maintenant les exercices du tutoriel A01Lb_scatterplot (Nuage de points).

BioDataScience1::run("A01Lb_scatterplot")
h5p

1.2.1 Échelles de graphiques

Vous devez être particulièrement vigilant lors de la réalisation d’un graphique en nuage de point sur l’étendue des valeurs présentées sur vos axes. Vous devez utiliser votre expertise de biologiste pour vous poser les deux questions suivantes :

  • Est-ce que l’axe représente des valeurs plausibles de hauteurs et de masses de ces oursins (sachant que l’espèce est Paracentrotus lividus vous pouvez faire une recherche pour vérifier les tailles et masses de ces animaux) ?

  • Quelle est la précision des mesures ?

Par défaut, chart() va calculer l’étendue des axes en tenant compte de la plus petite et de la plus grande valeur observée. Dans certains cas, lorsqu’une ou plusieurs observations s’éloignent très fort du nuage de points (par exemple, une valeur mal encodée avec un zéro de trop à la fin du nombre), le graphique va compresser le nuage de points à cause de la présence de ces valeurs aberrantes. Ce n’est pas le cas ici, mais nous pouvons le simuler en distendant artificiellement soit l’axe X, soit l’axe Y, soit les deux :

Piège du nuage de points. A) Graphique initial montrant la variation de la hauteur [mm] en fonction de la masse [g]. B) Graphique A avec la modification de l'échelle de l'axe X. C) Graphique A avec une seconde modification de l'axe X. D) Graphique A avec modification simultanée des deux axes.

Figure 1.3: Piège du nuage de points. A) Graphique initial montrant la variation de la hauteur [mm] en fonction de la masse [g]. B) Graphique A avec la modification de l’échelle de l’axe X. C) Graphique A avec une seconde modification de l’axe X. D) Graphique A avec modification simultanée des deux axes.

Vous voyez que l’effet peut éventuellement être assez catastrophique. Faites donc bien attention à la façon dont les points se répartissent et remplissent ou non le graphique pour éviter de tomber dans ce piège !

À vous de jouer !

Note : l’exercice suivant est une application Shiny. Il s’agit d’un petit programme écrit en R et qui vise à expérimenter un concept de manière interactive. Vous pouvez lancer cet exercice directement dans cette page. Vérifiez d’être bien enregistré (message à l’ouverture de l’application) et n’oubliez pas de cliquer sur le bouton Submit pour tester votre choix, mais également sur le bouton Save & Quit pour valider définitivement votre réponse pour la prendre en compte dans votre rapport de progression.

Cliquez pour lancer ou exécutez dans RStudio BioDataScience1::run_app("A01Sa_limits").

1.2.2 Transformation des données

Vous avez la possibilité d’appliquer une transformation à vos données (il est même conseillé de le faire) pour qu’elles soient plus facilement analysables ensuite. Par exemple, il est possible d’utiliser des fonctions de puissance, racines, logarithmes, exponentielles4 pour modifier l’apparence du nuage de points dans le but de le rendre plus linéaire. Il est, en effet, plus facile d’analyser statistiquement des données qui s’alignent le long d’une droite.

À vous de jouer !

Cliquez pour lancer ou exécutez dans RStudio BioDataScience1::run_app("A01Sb_transformation").

Pièges et astuces

RStudio permet de récupérer rapidement des instructions à partir d’une banque de solutions toutes prêtes. Cela s’appelle des snippets. Vous avez une série de snippets disponibles dans la SciViews Box. Celui qui vous permet de réaliser un graphique en nuage de points s’appelle .cbxy (pour chart -> bivariate -> xy-plot). Entrez ce code et appuyez ensuite sur la tabulation dans un document de type script R, et vous verrez le code remplacé par ceci dans la fenêtre d’édition :

chart(data = DF, YNUM ~ XNUM) +
  geom_point()

Vous avez à votre disposition un ensemble de snippets que vous pouvez retrouver dans l’aide-mémoire consacré à SciViews. Vous avez également à votre disposition l’aide-mémoire sur la visualisation des données (Data Visualization Cheat Sheet) qui utilise la fonction ggplot() plutôt que chart() et une interface légèrement différente pour spécifier les variables à utiliser pour réaliser le graphique (aes(x = ..., y = ...)).

Prêtez une attention toute particulière à l’organisation d’un script R. En plus des instructions R, il contient aussi sous forme de commentaires, un titre, la date de la dernière mise à jour, le nom de l’auteur, et des sections qui organisent de façon claire le contenu du script. À ce sujet, vous trouverez des explications détaillées concernant l’utilisation des scripts R dans l’annexe B.1.2.


  1. Dans R, une formule permet de spécifier les variables avec lesquelles on souhaite travailler, et leur rôle. Par exemple ici, la variable x sur l’axe des abscisses et la variable y sur l’axe des ordonnées.↩︎

  2. Pour les proportions (prop) ou les pourcentages (perc) (valeurs bornées entre 0 et 1 ou 0 et 100%) la transformation arc-sinus est souvent utilisée dans la littérature \(prop′ = \arcsin \sqrt{prop}\) ou \(perc′ = \arcsin \sqrt{perc / 100}\). Son usage est cependant soumis à la critique et tous les statisticiens ne sont pas d’accord au sujet de cette transformation.↩︎