Ce graphique a exactement toutes les informations nécessaires pour être compris rapidement. Illustrer clairement ses idées doit être le premier objectif de toute personne ayant à communiquer avec une audience. Ceci n’est pas toujours le cas. La plupart du temps nous confondons l’exploration des données avec l’explication des données. Cole Nussbaumer Knaflic,dans son livre Storytelling with data présente tout l’intérêt d’éliminer dans son illustration les éléments qui n’aident pas à mieux saisir le message véhiculé. Le graphique servant de challenge est tiré de ce livre là. Dessiné avec Microsoft Excel,il sera,dans notre cas, réalisé essentiellement avec R. Ses particularités résident dans:
1. La position des noms des axes,
2. L’alignement du titre,
3. L’alignement du texte explicatif, 4. L’absence d’étiquettes sur l’axe des abscisses,
5. Les points sur les graphes. Comme la logique des couches, le graphique sera “dessiné” au fur et à mesure.
Les données ont été approximativement déterminées.
received<-c(157,170,245,150,170,157,137,202,160,139,149,177)
processed<-c(157,170,245,150,170,150,130,156,126,104,124,140)
#par(oma=c(5,1,4,3))
df<-data.frame(received,processed)
rownames(df)<-month.abb
df
## received processed
## Jan 157 157
## Feb 170 170
## Mar 245 245
## Apr 150 150
## May 170 170
## Jun 157 150
## Jul 137 130
## Aug 202 156
## Sep 160 126
## Oct 139 104
## Nov 149 124
## Dec 177 140
Dans cette première illustration, les graphes sont représentés. Une des particularités est satisfaite: absence des étiquettes sur l’axe des abscisses.
plot(df$received,lwd=5,xlim=c(1,14),ylim=c(0,300),type="l",xpd=TRUE,col="gray",
xaxs="i",yaxs="i",axes=FALSE,xlab="",ylab="")
axis(side=1, lwd=1,xpd=TRUE,at=1:12,labels=month.abb,lwd.ticks =0)
axis(side=2, lwd=1, xpd=TRUE,at=seq(0,300,50))
lines(df$processed,lwd=5,col="darkblue")
segments(5,0,5,250,lwd=0.5)
On constate qu’il y a des points d’une certaine dimension sur les graphes. Pour une meilleure lecture, la valeur de ces points sont directement indiqués sur le graphique. A ce stade une autre particularité est satisfaite: les poiunts sur le graphique.
plot(df$received,lwd=5,xlim=c(1,14),ylim=c(0,300),type="l",xpd=TRUE,col="gray",
xaxs="i",yaxs="i",axes=FALSE,xlab="",ylab="")
axis(side=1, lwd=1,xpd=TRUE,at=1:12,labels=month.abb,lwd.ticks =0)
axis(side=2, lwd=1, xpd=TRUE,at=seq(0,300,50))
lines(df$processed,lwd=5,col="darkblue")
segments(5,0,5,250,lwd=0.5)
for(i in 8:length(df$received))
{
points(i,df[i,1],cex=2,col="darkgray",pch=16)
points(i,df[i,2],cex=2,col="darkblue",pch=16)
}
for(i in 8:length(df$received))
{
text(i,(df[i,1]+15),labels=df[i,1],cex=1,col="darkgray")
text(i,(df[i,2]-15),labels=df[i,2],cex=1,col="darkblue")
}
A ce stade, on ajoute le nom des axes ainsi que le titre du graphique. Deux particuarités sont satisfaites par trois lignes de code: alignement du titre et la position du nom des axes.
plot(df$received,lwd=5,xlim=c(1,14),ylim=c(0,300),type="l",xpd=TRUE,col="gray",
xaxs="i",yaxs="i",axes=FALSE,xlab="",ylab="")
axis(side=1, lwd=1,xpd=TRUE,at=1:12,labels=month.abb,lwd.ticks =0)
axis(side=2, lwd=1, xpd=TRUE,at=seq(0,300,50))
lines(df$processed,lwd=5,col="darkblue")
segments(5,0,5,250,lwd=0.5)
for(i in 8:length(df$received))
{
points(i,df[i,1],cex=2,col="darkgray",pch=16)
points(i,df[i,2],cex=2,col="darkblue",pch=16)
}
for(i in 8:length(df$received))
{
text(i,(df[i,1]+15),labels=df[i,1],cex=1,col="darkgray")
text(i,(df[i,2]-15),labels=df[i,2],cex=1,col="darkblue")
}
mtext("2014",adj=0,side=1,line=2)
mtext("Number of tickets",adj=1,side=2,line=2)
mtext("Ticket volume over time",at=2.4,side=3,line=0.8,cex=1.5,font=2)
Le texte explicatif ainsi que le nom des graphes sont ajoutés au graphique.
plot(df$received,lwd=5,xlim=c(1,14),ylim=c(0,300),type="l",xpd=TRUE,col="gray",
xaxs="i",yaxs="i",axes=FALSE,xlab="",ylab="")
axis(side=1, lwd=1,xpd=TRUE,at=1:12,labels=month.abb,lwd.ticks =0)
axis(side=2, lwd=1, xpd=TRUE,at=seq(0,300,50))
lines(df$processed,lwd=5,col="darkblue")
segments(5,0,5,250,lwd=0.5)
for(i in 8:length(df$received))
{
points(i,df[i,1],cex=2,col="darkgray",pch=16)
points(i,df[i,2],cex=2,col="darkblue",pch=16)
}
for(i in 8:length(df$received))
{
text(i,(df[i,1]+15),labels=df[i,1],cex=1,col="darkgray")
text(i,(df[i,2]-15),labels=df[i,2],cex=1,col="darkblue")
}
mtext("2014",adj=0,side=1,line=2)
mtext("Number of tickets",adj=1,side=2,line=2)
mtext("Ticket volume over time",at=2.4,side=3,line=0.8,cex=1.5,font=2)
story<-"2 employees quit in May.We nearly kept up with incoming\n
volume in the following two months, but fell behind with the\n
increase in Aug and haven't been able to catch up since."
par(lheight=0.5)
text(5,275,labels=story,adj=0)
text(13,df[12,1]+1,labels="Received",offset=2,cex=1,font=2,col="darkgray")
text(13,df[12,2]+1,labels="Processed",offset=2,cex=1,font=2,col="darkblue")
Les librairies qui viennent avec le R basique permettent de réaliser des graphiques d’une très grande qualité. L’une des difficultés constatées est de parvenir à bien choisir la localisation des textes.