1.Introduction

Package graphics:

plot(x=iris$Petal.Length, y=iris$Petal.Width, col=iris$Species)
legend(x='bottomright',
       pch=1, #forme points dans la légende
       col=1:3,
       legend=levels(iris$Species))

Package ggplot2:

#install.packages('ggplot2')
library(ggplot2)
ggplot(iris) + aes(x=Petal.Length, y=Petal.Width, col=Species) + geom_point()

2.Principe

L’idée de base de la grammaire graphique est que tout graphique s’obtient en spécifiant et combinant des layers (calques). Parmi les layers possibles on a (liste non complète):

La fonction ggplot() a deux arguments de base

Cela n’est pas encore suffisant pour afficher un graphique:

mydata=ggplot2::mpg
#On utilise la syntaxe ggplot2::mpg pour le data frame mpg du package ggplot2,
#parce que mpg est aussi un attribut du data frame mtcars
p <- ggplot(mydata, aes(displ, hwy, col = as.factor(cyl))) 
print(p)

#Même chose que
#ggplot(mpg) + aes(displ, hwy, col=as.factor(cyl))

Il faut ajouter le layer avec les objets géométriques qu’on veut utiliser pour visualiser les esthétiques. Cela se fait très intuitivement avec un +:

p + geom_point()

3. Aesthetic mapping et geometric objects

Dans le contexte de ggplot2 le mot esthétique veut dire quelque chose qu’on peut voir. On peut penser aux paramètres esthétiques comme aux variables (ou attributs) du data frame qu’on veut visualiser sous forme de points dans le plan, d’intensité de couleur, de forme géométrique…

Chaque objet géométrique a ses esthétiques. Parmi les paramètres esthétiques on a

On pourra consulter l’aide d’un objet géométrique pour connaitre les paramètres esthétiques acceptés. On affecte un attribut à un paramètre esthétique à l’aide de la fonction aes().

Les objets géométriques sont les signes qu’on met dans un graphiques, par exemple

Un graphique doit avoir au moins un objet géométrique. On peut consulter la liste de tous le objets géométriques disponibles avec la commande help.search("geom_", package = "ggplot2")

3.1 Exemple: scatterplot avec lignes de lissage

p <- ggplot(mydata, aes(x=displ,y=hwy,col=drv)) 
p + geom_point() 

Parfois il est préférable de spécifier l’argument aes() dans geom_():

q <- ggplot(mydata) 
q + geom_point(aes(x=displ,y=hwy,col=drv))

On peut facilement ajouter la droite de régression:

q + geom_point(aes(x=displ,y=hwy,col=drv)) + geom_smooth(aes(x=displ,y=hwy),method='lm')

Si on spécifie le layer aes dans ggplot(), ses arguments sont hérités dans la suite:

p + geom_point() + geom_smooth(method='lm')

En alternative on peut éviter que geom_smooth() hérite le layer aes précédent à l’aide de l’argument inherit.aes=FALSE. Essayer:

p + geom_point() + geom_smooth(method='lm', inherit.aes=FALSE, aes(x=displ,y=hwy))

On peut aussi utiliser geom_abline() après avoir estimé les coefficients de la droite de régression:

reg_line = coef(lm(hwy ~ displ, data = mydata))
p + geom_point() + geom_abline(intercept=reg_line[1],slope=reg_line[2])

3.2 Exemple: Ajouter des etiquettes aux points

On utilise le package ggrepel avec geom_text_repel:

#install.packages('ggrepel')
library(ggrepel)
g <- ggplot(subset(mydata, subset = (manufacturer == 'ford')), aes(x=displ, y=hwy))
g + geom_point() + geom_text_repel(aes(label = model), size=4)

3.3 Autres exemples

q + geom_point(aes(x=displ,y=hwy)) + geom_vline(xintercept = 5) #droite verticale

p + geom_point(aes(x=displ,y=hwy), size=4, colour="red")

q +  geom_point(aes(x=displ,y=hwy)) + geom_text(aes(2.5,44), label="Un outlier?")

4. Les limites des axes

Il y a deux méthodes pour changer le range des axes x et y.

On peut préciser les limites et éliminer les points qui se trouvent en dehors avec xlim() et ylim():

p + geom_point() + xlim(1,3) 
## Warning: Removed 126 rows containing missing values (geom_point).

Attention: si après avoir éliminé des points, on demande à visualiser la droite des moindres carrés, celle-ci sera calculée à partir des points que nous gardons, et donc elle sera différente de celle calculée à partir des tous les points:

p + geom_point() + xlim(1,3) + geom_smooth(method='lm',inherit.aes=FALSE, aes(x=displ,y=hwy))
## Warning: Removed 126 rows containing non-finite values (stat_smooth).
## Warning: Removed 126 rows containing missing values (geom_point).

La deuxième méthode consiste à faire un zoom, sans éliminer des points, avec coord_cartesian(). Dans ce cas la droite de régression ne change pas:

p + geom_point() + coord_cartesian(xlim=c(1,3)) + geom_smooth(method='lm',inherit.aes=FALSE, aes(x=displ,y=hwy))

5. Les etiquettes

On contrôle le titre et le nom des axes à l’aide de labs():

p + geom_point() + labs(title='Données mpg',
                        subtitle='Scatterplot', 
                        x='Poids',
                        y='Consommation')

6. Scale

Quand on affecte une variable à un objet géometrique avec aes() on ne spécifie pas explicitement comment la variable sera visualisée par cet objet géometrique. Par exemple quand on demande de visualiser une variable à travers une couleur, dans aes() on ne dit pas la couleur qui sera utilisée. Cela se fait un utilisant les scales.

6.1 Exemple: modifier la légende

La fonction utilisée pour modifier la légende dépend du type de variable qui est visualisé dans la légende. Par exemple si la variable dans la légende est une variable qualitative représentée sous forme de couleur:

p + geom_point() + 
  scale_colour_discrete(name='Traction',
                        breaks=c('4','f','r'),
                        labels=c('4x4','avant','arrière'))

7. Visualisation par petits multiples: les facettes

On peut reproduire le même graphique pour chaque valeur d’une variable qualitative donnée et visualiser l’ensemble de ces graphiques dans une même fenêtre à l’aide de facet_wrap()

p + geom_point() + facet_wrap(facets = ~ manufacturer)

facet_wrap() permet de subdiviser selon les valeurs de plusieurs variables:

p + geom_point() + facet_wrap(facets =  class ~ fl)

Pour faire des comparaisons il est cependant plus utile de visualiser les facettes dans une matrice avec facet_grid():

p + geom_point() + facet_grid(facets = class ~ fl)

A faire:

Scales, Theme, Exemples