FLASH INFORMATIQUE FI



Graphiques avec R


R, puissant environnement pour le calcul en statistiques, peut être utilisé pour afficher vos données dans une multitude de formats. Dans cet article, plusieurs exemples simples seront montrés. Pas besoin d’être statisticien pour apprécier les fonctionnalités de R !



R, a powerful environment for statistical computing, can be used to plot your data in a variety of formats. In this article, several easy examples will be shown. No need to be a statistician to appreciate the features of R !


Vittoria REZZONICO


Fiche descriptive



Il est peut-être réducteur de vouloir utiliser R uniquement pour générer des graphiques, mais cela a plusieurs avantages :

  • une uniformisation de vos graphiques, idéal lorsqu’on rédige une thèse ;
  • possibilité de manipuler les données (post-processing) avant de les afficher ;
  • plusieurs formats de fichiers possibles en sortie, que vous écriviez vos documents avec LibreOffice, LaTeX ou que vous publiiez vos images sur le Web, R a un pilote de sortie adapté.

Dans l’article R : un logiciel libre pour l’analyse de vos données paru dans le numéro précédent du FI, vous avez découvert le logiciel R. Ici, je vais donner quelques exemples simples qui vous permettront de créer des graphiques professionnels que vous pourrez inclure dans vos documents.

Formats de fichiers

R peut générer différents formats de fichiers via les graphic device drivers. On a deux types de pilotes :

  • ceux pour l’affichage à l’écran ;
  • ceux pour écrire dans un fichier.

L’affichage à l’écran se fait par défaut, lorsqu’on appelle une fonction d’affichage (par exemple, plot) sans rien spécifier auparavant.
Nous allons nous intéresser aux device drivers pour écrire dans un fichier des graphiques générés destinés à être ensuite inclus dans d’autres documents.

Formats bitmap

Le format le plus utilisé de cette catégorie est sans doute PNG. Pour écrire votre graphique dans un fichier PNG, il suffit d’entourer vos commandes d’affichage :

png("fichier.png", width=400, height=400)
# commandes d'affichage
dev.off()

La largeur et la hauteur sont spécifiées en pixels par défaut.

Formats non bitmap (vectoriels)

Si vous souhaitez inclure votre graphique dans un fichier TeX, vous avez trois drivers à votre disposition : postscript, pdf et tikz. Pour écrire votre graphique dans un PDF ou un fichier TeX, il suffit de faire

pdf("fichier.pdf", width=5, height=5)
# commandes d'affichage
dev.off()

ou

tikz("fichier.tex", width=4, height=4)
# commandes d'affichage
dev.off()

respectivement. La largeur et la hauteur sont spécifiées en pouces. D’autres drivers sont disponibles, citons WMF, PostScript, TIFF, BMP et je vous laisse explorer l’aide en ligne de R.

Le driver Tikz

Le driver Tikz mérite une attention particulière. Il nous permet de générer des fichiers que l’on peut inclure directement dans des documents LaTeX (voir aussi l’article TeX Live, distribution TeX/LaTeX libre de Benjamin Barras dans le FI 6/2011) de la façon suivante :

\documentclass[11pt]{article}

\usepackage{tikz}
\begin{document}

\begin{center}
\input{R-graph.tex}
\end{center}

\end{document}

Pour avoir accès au driver Tikz sous R, il faut installer le paquetage correspondant, depuis l’environment R, avec la commande :

install.packages("tikzDevice")

et importer le paquetage avant d’utiliser le driver  :

require(tikzDevice)
tikz("R-graph.tex", width=4, height=4)
# commandes d'affichage
dev.off()

Quelques exemples pratiques

Maintenant que vous avez installé les paquetages nécessaires et choisi votre format de fichier favori, nous sommes prêts à montrer quelques exemples. Les images de cet article ont été générées avec le driver PDF. Dans la suite des exemples de cet article, je vais uniquement indiquer les commandes d’affichage, à vous de rajouter le nécessaire pour rediriger la sortie vers un fichier.
Il faut d’abord définir des palettes de couleurs qui nous seront utiles par la suite :

theme4pw <- c(
rgb(149,193,26, maxColorValue = 255),
rgb(179,207,94, maxColorValue = 255),
rgb(207,224,154, maxColorValue = 255),
rgb(231,239,208, maxColorValue = 255),
rgb(229,229,229, maxColorValue = 255))

theme3b <- c(
rgb(149,193,26, maxColorValue = 255),
rgb(196,217,130, maxColorValue = 255),
rgb(226,236,197, maxColorValue = 255))

theme3l <- c(
rgb(149,193,26, maxColorValue = 255),
rgb(176,209,83, maxColorValue = 255),
rgb(136,136,136, maxColorValue = 255)

Camemberts

Commençons par l’incontournable camembert tant demandé par les managers. Ignorons, pour un instant, l’aide en ligne de R qui nous dit que les camemberts sont à éviter :

Note :
Pie charts are a very bad way of displaying information. The eye is good at judging linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data.

Importons des données depuis un fichier pie.txt :

toplot <- read.table("pie.txt")
ltext=rownames(toplot)

purchased used

g1 51 24.3
g2 23.6 14.6
g3 7.6 11.8
g4 8 49.3
free 9.8 0

flchier pie.txt

Nous pouvons afficher la première colonne (purchased) dans un camembert (fig. 1) :

pie(toplot[,1], labels=ltext, col=theme4pw)

Pour rendre encore plus heureux les managers, nous pouvons afficher un camembert 3D (fig. 2).

require(plotrix)
pie3D(toplot[,1], labels=ltext, col=theme4pw,
 explode=0.1)


fig. 1 - camembert


fig. 2 - camembert 3D

Histogrammes cumulatifs

Les histogrammes cumulatifs (fig. 3), par rapport aux camemberts, nous donnent une meilleure idée des grandeurs comparées :

barplot(as.matrix(toplot), col=theme4pw,
xlim=c(0,3.5))
abline(h=(0:10)*10, lty=3, col='gray')
legend("topright", ltext[length(ltext):1],
col='black', pch=c(22),
pt.bg=theme4pw[length(theme4pw):1],
bty='n')


fig. 3 - histogramme cumulatif

Histogrammes

Rainy Dark Foggy Sunny
"player 1" 3.2 1.8 1.2 0.9
"player 2" 1.5 2.0 1.2 1.0
"player 3" 4.1 1.5 1.4 1.3  

fichier bars.txt

Nous pouvons utiliser les histogrammes sans les empiler (fig. 4), toujours avec la commande barplot.

times <- read.table("bars.txt")

barplot(as.matrix(times),col=theme3b,beside=TRUE, xlab='weather', ylab='time to destination [h]')
abline(h=(1:4), lty=3, col='gray')
abline(h=0, lty=1, col='black')
legend("topright", legend=rownames(times), col='black', pch=c(22), pt.bg=theme3b, bty='n')


fig. 4 - histogramme simple

La commande Plot

1  3457.6953   6020.6509     3314.5898
2  5268.7849   11918.0629    4884.5262
4  5541.83     20878.2638    9534.0259
8  5543.9268   28863.862     18089.6665
16 NA          NA            29723.2094

fichier cluster-data.txt

Souvent, on souhaite afficher des données y versus x. Dans R, ceci est possible avec la commande plot. L’ajout de graphes supplémentaires sur la même figure est possible avec la commande points. Un exemple de ce type de graphe est montré dans la figure 5.

cdata=read.table("cluster-data.txt")
plot(cdata[,1], cdata[,2], log="x", type='b',
xlab='threads',ylab='GB/s',ylim=c(3000,30000),
xaxt='n', yaxt='n', pch=1, col=theme3l[1])
axis(1,at=c(1,2,4,8,16))
axis(2,at=c(5000,10000,15000,20000,25000,30000),
lab=c(5,10,15, 20,25, 30))
points(cdata[,1],cdata[,3],type='b',col=theme3l[2],pch=2)
points(cdata[,1],cdata[,4],type='b',col=theme3l[3],pch=3)
legend("topleft",
legend=c("Callisto","Antares","Jupiter"),
col=theme3l, pch=c(1,2,3))


fig. 5 - graphiques à l’aide des fonctions plot et points

Maintenant, explorons d’autres types de graphes réalisables avec R. Vous verrez que les possibilités sont nombreuses. De plus, le paquetage CRAN augmente encore la palette.

Timeline

Afficher une ligne temporelle n’a jamais été si simple - il suffit de connaître les bonnes commandes R. Le prochain exemple illustre les plates-formes et les initiatives en calcul haute performance à l’EPFL entre 1990 et 2004.

"Pascal" "1993/11/01" "1999/05/01"
"Merope/J90se" "1997/03/21" "2001/02/05"
"Orion" "1997/02/01" "1999/06/01"
"Eridan" "1997/12/01" "2005/05/01"
"Swiss-T0" "1998/05/01" "2000/08/01"
"Swiss-T0 dual" "1998/10/01" "1999/09/01"
"Swiss-T1 baby" "1999/08/01" "2003/06/01"
"Swiss T1" "2000/01/01" "2003/01/01"

flchier hpctimeline.txt

require(plotrix)
hpctimeline=read.table("hpctimeline.txt")
Ymd.format<-"%Y/%m/%d"

vgridpos<-as.POSIXct(strptime(c(
"1992/01/01", "1994/01/01", "1996/01/01",
"1998/01/01", "2000/01/01", "2002/01/01"
), format=Ymd.format))

vgridlab<- c( "1992", "1994", "1996", "1998",
                             "2000", "2002")

startend=as.POSIXct(strptime(c("1992/06/01",
"2004/01/01"), format=Ymd.format))

gantt.info <- list(
labels=hpctimeline[,1],
starts=as.POSIXct(strptime(hpctimeline[,2],
format=Ymd.format)),
ends=as.POSIXct(strptime(hpctimeline[,3],
format=Ymd.format)))

gantt.chart(gantt.info, vgridpos=vgridpos,
vgridlab=vgridlab, hgrid=TRUE, priority.legend=FALSE,
taskcolors=theme3l[1], xlim=startend)



fig. 6 - HPC - historique entre 1994 et 2002

Graphes

R est aussi capable d’afficher les graphes orientés ou non-orientés, en voici un exemple :

require(igraph)
adjmat<-matrix(0,5,5)
colnames(adjmat)=c("rock", "paper", "scissors",
"spock", "lizard")
rownames(adjmat)=c("rock", "paper", "scissors",
"spock", "lizard")
adjmat[2,1]=adjmat[3,2]=adjmat[4,3]=adjmat[5,4]=
adjmat[1,5]=1
adjmat[4,1]=adjmat[5,2]=adjmat[1,3]=adjmat[2,4]=
adjmat[3,5]=1
gs <- graph.adjacency(adjmat)
# affichage
plot.igraph(gs, layout=layout.circle,
vertex.label=c("rock", "paper", "scissors", "spock",
"lizard"), vertex.size=80, vertex.color=theme4pw[3],
edge.color=theme3b[1])

Dans la figure 7, les étiquettes (noeuds du graphe) ont été remplacées par les pictogrammes correspondants.


fig. 7 - exemple de graphe orienté

Conclusion

Dans cet article, je vous ai fourni des recettes toutes prêtes pour afficher vos données avec certains types de graphiques. Si R n’est généralement pas facile d’accès, j’espère vous avoir donné un avant-goût qui puisse vous motiver à explorer ce logiciel. La qualité des graphiques générés ainsi que l’uniformité entre les différentes représentations et l’intégration aisée dans tout type de document font de R un allié dans la rédaction de documents techniques ou scientifiques. Lorsqu’on dispose de beaucoup de données à afficher, le fait de pouvoir importer les fichiers bruts et scripter la génération des graphiques donne à R un avantage notable, par exemple, sur les tableurs.
L’affichage des données est un art, qui nécessite comme base de bonnes données à afficher. Du post-processing est parfois nécessaire pour faire un tri dans les données, ainsi qu’un certain savoir-faire pour mettre en évidence la partie des données souhaitée. Aucun programme ne remplace ce savoir-faire, mais peut-être que R vous motiverait à l’acquérir.


Article du FI-EPFL 2012 sous licence CC BY-SA 3.0 / V. Rezzonico



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.