Comment utiliser ggplot dans une boucle ou dans une fonction ?

ggplot_aes_string()

ggplot() est la fonction de base du package ggplot2, qui est le package incontournable pour réaliser des représentations graphiques avec R. ggplot2 est extrêmement populaire car il permet de réaliser une multitude de visualisations, de façon rapide et esthétique.

La réalisation de plots avec ce package nécessite un petit apprentissage pour en comprendre le principe, mais ne pose pas de problème particulier, en pratique courante.

En revanche, lorsqu’on souhaite utiliser la fonction ggplot au sein d’une boucle, pour réaliser un graphique de façon itérative par exemple, ou encore lorsqu’on souhaite l’intégrer au sein d’une autre fonction, cela est généralement plus délicat.

La solution est en réalité très simple puisqu’elle consiste à utiliser l’argument aes_string à la place de l’argument aes lorsqu’on fait appel à la fonction ggplot!

Dans ce post, je vais donc vous montrer concrètement comment utiliser la fonction ggplot à l’intérieur d’une boucle for, puis au sein d’une fonction.

Si vous faites partis des rares utilisateurs de R qui n’utilisent pas encore ggplot2, vous pourrez trouver deux introductions à ce package, en français, ici et .

Contenu :

  • Définition du problème
  • Utilisation courante de ggplot2
  • Utilisation automatisée de ggplot2
  • Utiliser ggplot dans une boucle (for par exemple)
  • Utiliser ggplot dans une fonction

 

1. Définition du problème

1.1 Utilisation courante de ggplot2

Imaginons que je souhaite évaluer la linéarité de la relation entre deux variables. Pour cela, je peux réaliser un scatterplot avec ggplot2 et ajouter une droite de régression linéaire, ainsi qu’une courbe loess, par exemple. Comme cela :

ggplot_aes_string()

Pour réaliser ce plot, j’ai utilisé les données iris, restreintes à l’espèce “setosa”. Je les ai obtenu avec les commandes suivantes :

Le jeu de données “setosa” comporte quatre variables :

J’ai ensuite construit le scatter plot de la variable “Sepal.Length” en fonction de la variable “Sepal.Width”. La fonction ggplot permettant alors de définir :

  • le data.frame (tableau de données) qui contient les données, à
    l’aide de l’argument data
  • les variables à représenter à l’aide de l’argument :
    aes(y=Sepal.Length,x=Sepal.Width)

Le type “scatterplot” est ensuite défini à l’aide de la fonction geom_point. Et les fonctions geom_smooth permettent de tracer la courbe loess, puis la droite de régression. Au final les commandes sont les suivantes :

C’est ce que j’appelle l’utilisation “courante” de la fonction ggplot.

1.2 Utilisation automatisée de ggplot2

Imaginons à présent que je souhaite créer, de façon automatisée, un scatter plot de la variable “Sepal.Length”, en fonction de chacune des trois autres variables du jeu de données. Autrement dit, trois scatterplots, avec chacun une variable prédictive différente “Sepal.Width”, “Petal.Length” et “Petal. Width”.

Je pourrais biensur passer le jeu de données en format “long” à l’aide de la fonction gather.

Puis utiliser la fonction facet_wrap.

ggplot_aes_string()

 

Cette solution peut être adaptée lorsque le nombre de variables explicatives (celles que l’on va représenter sur l’axe des x) est faible. En revanche lorsque ce nombre est important cette solution conduit à des plots de petite taille et donc à une lisibilité réduite.

Imaginons donc que je souhaite créer ces 3 plots de façon distincte.
Deux solutions sont alors possibles :

  • utiliser directement la fonction ggplot dans une boucle
  • construire une fonction qui emploie la fonction ggplot, et
    l’intégrer dans une boucle.

Je vais donc vous montrer comment réaliser concrètement ces deux solutions.

2. Utiliser ggplot dans une boucle (for par exemple)

Le problème ici, dans la boucle, c’est de parvenir à changer itérativement la variable explicative (celle qui est représentée sur l’axe des x). Pour cela, on doit impérativement utiliser l’argument
aes_string car contrairement à l’argumentaes, il peut intégrer des chaines de caractères
. Les variables explicatives sont alors fournies à l’argument aes_stringen utilisant la fonction
colnames(data.frame)[i].

ggplot_aes_string()

ggplot_aes_string()

ggplot_aes_string()

 

Et si vous voulez sauvegarder automatiquement ces plots, vous pouvez utiliser les commandes suivantes :

 

3. Utiliser ggplot dans une fonction

Une autre façon de faire, pour créer ces 3 plots, peut consister à créer une fonction plot, en utilisant ici encore l’argument aes_string

Qui s’utilise comme ceci :

my_plot(setosa, “Sepal.Width”, “Sepal.Length”)

ggplot_aes_string()

 

Ensuite, cette fonction peut être intégrée dans une boucle for, comme cela par exemple :

ggplot_aes_string()

ggplot_aes_string()

ggplot_aes_string()

 

Et là encore, pour sauvegarder les plots automatiquement dans des fichiers jpeg, vous utiliser les lignes suivantes:

 

Voilà ! J’espère que cet article vous évitera de perdre inutilement du temps à la recherche d’une solution, et qu’il vous permettra de réaliser plus facilement vos plots de façon automatisée avec ggplot2.

Si cet article vous a été utile, n’oubliez pas de le partager !

Crédits photos : jambulboy

Retrouver ici mes 5 derniers articles :

Tests de permutation avec le logiciel R

Ressources francophones pour l’analyse de données avec le logiciel R

Comparaison de moyennes : indiquez la significativité des différences sur le graph

Vous avez des données manquantes ? Essayez missMDA!

Mémo sur les lists

Partager l'article
  •  
  •  
  •  
  •  
  •  
    2
    Partages
  • 2
  •  
  •  
  •  
  •  

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *