Je ne sais comment nommer ce type de graphiques : en abscisses, des années, et en ordonnées, des personnes, le graphique lui-même consistant à indiquer (en noir) que la personne est vivante (ou présente)… Une frise ?
N’ayant pas de nom, il est somme toute normal d’avoir du mal à le créer avec R, le logiciel d’analyse statistique “open source”. L’année dernière, j’avais bricolé un code affreux pour aboutir à quelque chose de potable. Je voulais un peu plus simple.
Démarrons avec ceci :
date Pass Cixo Cast
1 1969 1 1 NA
2 1970 1 1 1
3 1971 1 1 1
4 1972 NA 1 1
5 1973 NA NA 1
Dans l’institution étudiée, Jean-Claude “Pass” et Hélène “Cixo” sont présents dès 1969 (mais seront tous deux absents en 1973), tandis que Robert “Cast” arrive en 1970. Il est toujours là en 1973.
Appelons “soci” cette chose.
Dans R, le package “reshape” permet de transformer ces données en quelque chose de plus aisé à travailler :
soci<-melt(soci,id=c("date"))
Ce qui donne :
date variable value
1 1969 Pass 1
2 1970 Pass 1
3 1971 Pass 1
4 1972 Pass NA
5 1973 Pass NA
6 1969 Cixo 1
7 1970 Cixo 1
8 1971 Cixo 1
9 1972 Cixo 1
10 1973 Cixo NA
11 1969 Cast NA
12 1970 Cast 1
13 1971 Cast 1
14 1972 Cast 1
15 1973 Cast 1
Pour obtenir la frise ci-dessous, j’ai chargé le package “ggplot2”
Les instructions utilisées sont les suivantes. Les répétitions de theme_blank()
peuvent sans doute être éliminées.
qplot(date,value,data=soci,geom="line",group=variable)
+ facet_grid(variable~.,scales="free",space="free")
+ opts(
panel.grid.minor=theme_blank(),
panel.grid.major=theme_blank(),
panel.background=theme_blank(),
axis.line=theme_blank(),
panel.border=theme_blank(),
axis.title.y=theme_blank(),
axis.text.y=theme_blank(),
strip.text.y=theme_text())
Tout ça pour ceci :
J’ai conscience de la futilité d’un tel exemple, mais cette représentation graphique, appliquée à une institution plus nombreuse, sur un plus grand nombre d’année, devrait permettre de visualiser de manière synthétique les arrivées et les départs, la permanence d’une partie du personnel et la bougeotte d’une autre partie.
On peut aussi ajouter à cette représentation d’autres informations. Par exemple, “0” indiquerait un statut d’assistant, “1” un statut de maître de conférences et “2” un statut de professeur.
date Pass Cixo Cast
1 1969 0 1 NA
2 1970 1 2 0
3 1971 1 2 1
4 1972 NA 2 1
5 1973 NA NA 2
On pourrait ainsi repérer des changements de statut dans la carrière :
Les instructions (un peu tordues, car je demande le dessin d’une ligne d’épaisseur zéro)…
qplot(date,value,data=soci,geom="line",group=variable,lwd=0)
+ geom_rect(aes(xmin = date-0.5, xmax = date + 0.5, ymin = 0, ymax = 2.5, fill=factor(value)))
+ facet_grid (variable ~ .,scales="free",space="free")
+ opts(
panel.grid.minor=theme_blank(),
panel.grid.major=theme_blank(),
panel.background=theme_blank(),
axis.line=theme_blank(),
panel.border=theme_blank(),
axis.title.y=theme_blank(),
axis.text.y=theme_blank(),
strip.text.y=theme_text(),
legend.position = "none")
+ scale_fill_manual(values = c("NA"="white","0"="lightgrey","1" = "darkgrey","2"="black"))
+ scale_y_continuous(breaks=NA)
Note : Pour aller plus loin, le blog http://learnr.wordpress.com/ (attentif à l’élégance graphique) contient nombre d’exemplesqui m’ont énormément servi.