Créer et Gérer vos graphiques dans R avec ggplot2

Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Cr´eer et G´erer vos graphiques dans R avec ggplot2
Karl-Augustt, A.
Utilisateur de R
29 Mars, 2014
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Sommaire
1 Introduction `
a ggplot2
2 Vos graphiques usuels
3 Pour aller plus loin
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
1 Introduction `
a ggplot2
2 Vos graphiques usuels
Les whiskers plots (boˆıtes `a moustache)
Diagrammes en bˆatons & histogrammes : amusez-vous !
Les Jeux d’esth´etiques
3 Pour aller plus loin
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Les graphiques dans R
Dans R, les packages requis pour les graphiques ont presque les
mˆemes similarit´es, mais ne donnent pas les mˆemes rendus. Pour
changer un graphe, il faut parfois changer non seulement la fonction
utilis´ee, mais aussi, les propri´et´es de la donn´ee entr´ee au d´epart.
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Exemple : limites du package base :
Z On ne peut modifier ou supprimer un ´el´ement du contenu ;
Z Modification libre non possible pour l’utilisateur ;
> x=c(7,7,8,8,8,1,2,1,1,1,1,1,1,1,1,1,3,4,5,5,5,5)
> hist(x) #histogramme avec base
> qplot(x,geom="histogram",binwidth=1)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Figure: Outputs base versus ggplot2
10.0
Histogram of x
count
8
6
2
4
5.0
2.5
0
Frequency
7.5
1
2
3
4
5
6
7
8
x
0.0
2
4
6
8
x
(a) Avec base
Karl-Augustt, A.
(b) Avec ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Question :
Pourquoi ggplot2 ?
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Background
ã Qu’est-ce qu’un graphique ?
ã Qu’est-ce qu’une grammaire des graphiques ?
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
Construire un grapphique : comment ?
Selon l’approche Wilkinson, un graphique tient lieu de six ´el´ements de
construction :
Z DATA : les donn´ees (un ensemble de variables extraites d’une base
de donn´ees) ;
Z TRANS : les transformations de variables ;
Z SCALE : les transformations d’´echelles (ex : log10 ) ;
Z COORD : le choix des coordonn´ees (ex : polaire) ;
Z ELEMENT : les ´el´ements du graphe (ex : des points) et leurs
attributs esth´etiques ;
Z GUIDE : les axes, les l´egendes, etc.
Karl-Augustt, A.
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
R´ealiser un grapphique statistique : comment ?
graphique
Output (rendu)
data
source
variables
E. esth´
etiques
T. alg´
ebriques
Type de Coordonn´
ees
T. ´
echelles
E. Statistiques
E. G´
eom´
etriques
Ensemble des variables
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
graphe
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
La Grammaire de Wilkinson ne fait pas la typologie
des graphiques
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
~ L’apprentissage de Ggplot2 est facile.
~ Ggplot2 fait de vous un designer, car vous avez le choix de cr´eer et
changer des templates, des th`emes (le look) de vos graphiques `a
volont´e.
~ Ggplot2 fonctionne avec une puissante grammaire des graphiques
(celle de Wilkinson,2005), et vous donne le goˆ
ut de la statistique,
car ggplot2 est un maˆıtre de la pr´esentation des donn´ees.
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
La derni`ere version disponible est : 0.9.3.1
ì http://docs.ggplot2.org/current/
ì R Graphics Cookbook de Winston Chang
ì ggplot2 : Elegant Graphics for Data Analysis de Hadley Wickham
ì https://groups.google.com/forum/#!forum/ggplot2 pour
tout partage (´eventuellement vous inqui´etudes de mˆeme).
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
1 Introduction `
a ggplot2
2 Vos graphiques usuels
Les whiskers plots (boˆıtes `a moustache)
Diagrammes en bˆatons & histogrammes : amusez-vous !
Les Jeux d’esth´etiques
3 Pour aller plus loin
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Les sources de donn´ees
L’une des bases utilis´ees ici est celle de L’Enquˆete D´emographique
Sant´e du B´enin, ann´ee 2006. Les autres exemples illustratifs sont
impl´ement´es dans le package ggplot2, et peuvent ˆetres t´el´echarg´es
depuis R Datasets, voir :
http ://vincentarelbundock.github.io/Rdatasets/datasets.html
y
y
EDS III B´enin 2006.
Donn´ees extraites de la 1974 de Motor Trend magazine am´ericain, et
comprend la consommation de carburant et 10 aspects de la conception
de l’automobile et de la performance pour 32 voitures (1973-1974
mod`eles).
y
Donn´ees de Fuel economy de 1999 `a 2008 pour 38 mod`eles populaires
de voitures.
y
Donn´ees relatifs aux prix 53,941 diamants taill´
es.
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Installation
> install.packages(”ggplot2”)
> library(ggplot2)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Description des commandes de ggplot2 : ggplot() &
qplot()
mapping[1] := (x,y) ; mapping[2] := aes(x, y)
qplot(mapping[1], data.frame,
layer[1]
(geom = "",
stat = "",
position = "")) +
layer[2](
geom_param`
etres = list(),
stat_param`
etres = list(),
)
Karl-Augustt, A.
ggplot(data.frame, mapping[2]
+ layer(
geom_param`
etres = list(),
stat_param`
etres = list(),
theme_param`
etres=list(),
coord_param`
etres=list(),
)
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
De quoi rassurer le d´ebutant...
Les commandes de ggplot2 sont tr`es indicatrices, il n’est donc pas
n´ecessaire de retenir une pile de commandes. On peut noter que
ggplot2 est multi-optionnel ( comme la plupart des commandes R),
mais reste tr`es sp´ecifique. Par exemple, la plupart des options de type
geom sont :
geom
geom
geom
geom
geom
geom
abline
boxplot
dotplot
histogram
segment
text
geom
geom
geom
geom
geom
geom
bar
density
freqpoly
jitter
smooth
violin
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
D´ecouvrir geom boxplot
geom_boxplot(mapping = NULL, data = NULL, stat = "boxplot",
position = "dodge", outlier.colour = "black",
outlier.shape = 16, outlier.size = 2, notch = FALSE,
notchwidth = 0.5, ...)
> p <- ggplot(mtcars, aes(factor(cyl), mpg))
> p + geom_boxplot()
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
p + geom boxplot()
35
30
cyl
8
25
mpg
7
outlier.colour=”green”, outlier.size=5,aes(fill=cyl)
6
20
5
4
15
10
4
6
8
factor(cyl)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
p + geom boxplot()
35
30
25
4
mpg
outlier.colour=”green”,
outlier.size=5,
aes(fill=factor(cyl))
factor(cyl)
6
20
8
15
10
4
6
8
factor(cyl)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
p + geom boxplot()
35
30
mpg
25
fill=”grey80”,colour=”#3366FF”,
outlier.colour=”green”, outlier.size=5
20
15
10
4
6
8
factor(cyl)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
p + geom boxplot()
35
30
25
4
mpg
colour=”#3366FF”,
outlier.colour=”green”,
outlier.size=5,
aes(fill=factor(cyl))
factor(cyl)
6
20
8
15
10
4
6
8
factor(cyl)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Pauvres & Riches
ggplot(data1, aes(x=milieu, y=scored)) +
geom_boxplot(notch=TRUE) + stat_summary(fun.y="mean",
geom="point", shape=23, size=3, fill="red") +
xlab("Milieu de R´
esidence")+ ylab ("Score des facteurs")
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Boxplot
Score des facteurs
600
400
200
0
Urbain
Rural
Milieu de Résidence
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
D´ecouvrir geom bar
geom_bar(mapping = NULL, data = NULL,
stat = "bin", position ="stack", ...)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
ggplot(diamonds, aes(clarity, fill=cut)) + geom bar()
10000
cut
Fair
count
Good
Very Good
Premium
5000
Ideal
0
I1
SI2
SI1
VS2
VS1
clarity
Karl-Augustt, A.
VVS2
VVS1
IF
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
ggplot(diamonds, aes(color, fill=cut)) + geom bar() + coord flip()
J
I
cut
color
H
Fair
Good
G
Very Good
Premium
F
Ideal
E
D
0
3000
6000
9000
count
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Essayons
ggplot(diamonds, aes(clarity))
+ geom_bar(aes(fill=color))
+ facet_wrap(~ cut)
Et que nous donnera ceci ?
ggplot(diamonds, aes(clarity)) +
geom_bar(aes(fill=color))
+ facet_wrap(~ cut)
+scale_fill_brewer()
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Fair
Good
Very Good
5000
4000
3000
color
2000
D
count
1000
E
0
F
Premium
Ideal
G
5000
H
4000
I
3000
J
2000
1000
0
I1
SI2
SI1 VS2 VS1 VVS2 VVS1 IF
I1
SI2
SI1 VS2 VS1 VVS2 VVS1 IF
clarity
Karl-Augustt, A.
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Fair
Good
Very Good
5000
4000
3000
color
2000
D
count
1000
E
0
F
Premium
Ideal
G
5000
H
4000
I
3000
J
2000
1000
0
I1
SI2 SI1 VS2 VS1 VVS2VVS1 IF
I1
SI2 SI1 VS2 VS1 VVS2VVS1 IF
clarity
Karl-Augustt, A.
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Assumons :
25
24.22
> df
17.04
15
prop.Freq
1
2
3
4
5
6
7
8
22.73
20
Claret´
e prop.Freq
I1
1.37
SI2
17.04
SI1
24.22
VS2
22.73
VS1
15.15
VVS2
9.39
VVS1
6.78
IF
3.32
15.15
10
9.39
6.78
5
>ggplot(df, aes(x=Claret´
e,y=prop.Freq))
+geom_bar(stat="identity")
+geom_text(aes(label=prop.Freq),
vjust=1.5, colour="white")
3.32
0
1.37
I1
IF
SI1
SI2
VS1
VS2
VVS1
VVS2
Clareté
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
IF
I1
cut
Assumons :
VVS1
Fair
Good
count
>ggplot(diamonds,aes(x=clarity,fill=cut))
+geom_bar()+coord_polar()+
theme(axis.text.y = element_blank(),
axis.ticks=element_blank())
SI2
Very Good
Premium
VVS2
SI1
VS1
Ideal
VS2
clarity
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Pauvres & Riches
> ggplot(data3, aes(x=score))
+geom_histogram(fill="blue", colour="black",binwidth=15)
+ facet_grid(milieu ~ .) +xlab("Score des facteurs")
+ ylab("Effectifs")
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Output
2500
2000
Urbain
1500
1000
Effectifs
500
0
2500
2000
Rural
1500
1000
500
0
0
200
400
600
800
Score des facteurs
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
> m <- ggplot(movies, aes(x=rating))
+ geom_histogram(aes(fill = ..count..))
+ geom_freqpoly()
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Output
5000
4000
count
5000
4000
count
3000
3000
2000
2000
1000
0
1000
0
2.5
5.0
rating
Karl-Augustt, A.
7.5
10.0
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Pauvres & Riches
>ggplot(data4, aes(x =Classes,y =effmenage,
color=Classes))+ geom_violin(fill = "steelblue")+
geom_jitter(alpha = 0.3)+facet_grid(.~milieu)
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Densit´e de la population enquˆet´ee par m´enage
Urbain
Rural
30
Classes
effmenage
Très Pauvre
Pauvre
20
Moyen
Riche
Très Riche
10
0
Très Pauvre Pauvre
Moyen
Riche Très Riche Très Pauvre Pauvre
Moyen
Riche Très Riche
Classes
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Pauvres & Riches
> ggplot(data5,aes(x=Classes,y =nomb_enf_nes,
color=Classes))+geom_violin(fill = "steelblue")
+geom_jitter(alpha = 0.3)
+ylab("Nombre d'enfants n´
es dans un couple")
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin Les whiskers plots (boˆıtes `
a moustache) Diagrammes en bˆ
atons
Nombre d'enfants nés dans un couple
Nombre d’enfants n´es dans un couple
15
Classes
Très Pauvre
10
Pauvre
Moyen
Riche
5
Très Riche
0
Très Pauvre
Pauvre
Moyen
Riche
Très Riche
Classes
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
1 Introduction `
a ggplot2
2 Vos graphiques usuels
Les whiskers plots (boˆıtes `a moustache)
Diagrammes en bˆatons & histogrammes : amusez-vous !
Les Jeux d’esth´etiques
3 Pour aller plus loin
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
> z <- ggplot(mtcars, aes(wt, mpg,
colour = factor(cyl))) +geom_point()
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
z+ theme(axis.ticks.length = unit(.85, ”cm”))+geom smooth(method=lm,
se=FALSE, fullrange=TRUE)
35
30
25
factor(cyl)
mpg
4
6
20
8
15
10
2
3
4
wt
Karl-Augustt, A.
5
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
z+ theme(legend.position = ”bottom”)
35
30
mpg
25
20
15
10
2
3
4
5
wt
factor(cyl)
4
6
8
ggplot2
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
z +theme(legend.position = c(.8, .5))
35
30
25
factor(cyl)
mpg
4
6
20
8
15
10
2
3
4
wt
Karl-Augustt, A.
5
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
z+theme(legend.background = element rect(colour = ”black”), legend.key =
element rect(fill = ”yellow”))
35
30
25
factor(cyl)
mpg
4
6
20
8
15
10
2
3
4
wt
Karl-Augustt, A.
5
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
z+theme bw()+theme(axis.title.x=element text(face=”italic”,
colour=”darkred”, size=14))
35
30
factor(cyl)
25
mpg
4
6
20
8
15
10
2
3
4
wt
Karl-Augustt, A.
5
ggplot2
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2
Introduction `
a ggplot2 Vos graphiques usuels Pour aller plus loin
MERCI POUR VOTRE
AIMABLE
ATTENTION !
Karl-Augustt, A.
Cr´
eer et G´
erer vos graphiques dans R avec ggplot2