10 mai 2014 Fabricɛ Dɛssaint Inra - UMR Agroécologie, Dijon 10 mai 2014 Cette note présente deux fonctions permettant d ajouter du texte à une Figure R. Selon la zone concernée, les marges ou la zone de données, on utilisera soit la fonction mtext(), soit la fonction text(). Trois fonctions complémentaires permettent d introduire des enrichissements (gras, italique, etc.) et de construire des formules mathématiques. Sommaire 1.1 Écrire dans les marges................................. 1 1.1.1 La fonction mtext().............................. 2 1.1.2 Exemples..................................... 3 1.2 Écrire dans la zone de données............................ 4 1.2.1 La fonction text()............................... 4 1.2.2 Exemple..................................... 5 1.3 Enrichir le texte..................................... 5 1.3.1 La fonction paste().............................. 5 1.3.2 La fonction expression().......................... 6 1.3.3 La fonction bquote()............................. 7 1.4 Exemple d application................................. 7 La fenêtre Graphique de R apparait dès lors que l on utilise une fonction de représentation graphique au sens large. À l intérieur de cette fenêtre, on trouve une ou plusieurs figures qui peuvent être des graphiques, des cartes, des images, des textes/formules, etc. Une figure se compose de 3 zones : les marges extérieures, les marges intérieures et la zone de données (Figure 1.1, page suivante). Par défaut, seules les deux dernières zones sont visibles et la figure occupe la totalité de la fenêtre Graphique. La taille de chacune de ces zones est modifiable avec la fonction par(). Les modifications apportées restent actives tant que la fenêtre Graphique est ouverte sauf si on les modifie de nouveau. 1.1 Écrire dans les marges Les marges extérieures/intérieures sont au nombre de 4 : marges basse, gauche, haute, droite. Leur taille est définie en nombre de lignes et ce nombre peut varier en fonction du type de marges (extérieure/intérieure) et de sa position (bas,gauche,haut,droite). Par défaut, la taille des 4 marges extérieures est nulle. On peut fixer d autres valeurs en utilisant la fonction par() avec l argument oma. Par exemple, la commande par(oma=c(2,2,2,2)) fixe à 2 lignes, la taille des 4 marges extérieures. Pour les marges intérieures, la taille définie par défaut est de 5.1, 4.1, 4.1 et 2.1 lignes pour la marge basse, gauche, haute et droite respectivement. On les modifie avec la fonction par() et l argument mar :
Marge extérieure Marge Intérieure FIGURE 1.1 Les différentes zones de la figure Zone de données Les 4 marges extérieures et intérieures et la zone de données. Sur cette figure, les marges extérieures apparaissent en gris foncé et sont de la même taille. Les marges intérieures sont en gris clair et elles ont leur taille par défaut. La zone de données est blanche et elle est définie par les pointillés. par exemple, par(mar=c(5,4,4,2)). 1.1.1 La fonction mtext() L écriture de texte dans les marges se fait avec la fonction mtext(). Cette fonction possède plusieurs arguments : text= le texte, entre guillemets droits simples (... ) ou double ("... ") ou une expression que l on veut voir apparaitre. Si c est un objet R, il est d abord transformé par la fonction as.graphicsannot(). side=3 un numéro correspondant à la marge de la figure qui va recevoir le texte avec les équivalences suivantes : 1=marge basse, 2=marge gauche, 3=marge haute et 4=marge droite. Par défaut, c est dans la marge haute, n o 3, que se fait l écriture. line=0 le numéro de la ligne où se fera l écriture, avec la convention de numérotation suivante : la première ligne a le numéro 0 et se situe vers l intérieur ; la dernière ligne a le numéro n 1 et se situe à l extérieur. Par défaut, c est la première ligne qui est utilisé, n o 0. outer=false indique le type de marge utilisée : la valeur FALSE correspond aux marges intérieures et la valeur TRUE aux marges extérieures. at=na donne la position du texte selon un système de coordonnées utilisateur. Si cet argument est à NA, la position est donnée par l argument adj. Cet argument ne peut être utilisé que pour du texte dans les marges intérieures. adj=na donne la position du texte selon un système de coordonnées compris entre 0 et 1. Le texte est aligné à gauche/bas pour la valeur 0 et à droite/haut pour la valeur 1. Une valeur de 0.5 centre le texte. padj=na valeur entre 0 et 1 qui permet d ajuster verticalement le texte. Pour un texte parallèle à l axe, padj=0 aligne le texte à droite/haut et padj=1 aligne le texte à gauche/bas. En plus de ces arguments, on peut aussi utiliser des arguments plus généraux, comme : cex=na une valeur numérique qui permet d augmenter/réduire la taille des caractères col=na couleur du texte font=na la fonte utilisée 2
Marge extérieure 3 Marge extérieure 2 Marge extérieure 3 Marge extérieure 4 Code R simplifié par(oma=c(3,3,3,3)) plot.new() mtext("m. Ext. 1",side=1,line=1,adj=0.5,outer=TRUE) mtext("m. Ext. 2",side=2,line=1,adj=0.5,outer=TRUE) mtext("m. Ext. 3"),side=3,line=0,adj=0,outer=TRUE) mtext("m. Ext. 3"),side=3,line=2,adj=1,outer=TRUE) ligne 2 ligne 1 ligne 0 ligne 0 ligne 1 ligne 2 Marge extérieure 1 Marge extérieure 4 mtext("m. Ext. 4"),side=4,line=0,adj=-0.1,outer=TRUE) mtext("m. Ext. 4"),side=4,line=2,adj=1.1,outer=TRUE) FIGURE 1.2 Écrire dans les marges extérieures : utilisation de la fonction mtext(). Position et ajustement du texte 1.1.2 Exemples Exemple 1 : Écrire dans les marges extérieures. La Figure 1.2, de la présente page, donne un exemple d écriture dans les marges extérieures. Sur les marges basse et gauche, le texte est centré (adj=0.5) et placé sur la ligne n o 1 (line=1). Sur les marges haute et droite, le texte est aligné respectivement à gauche et à droite (adj=0, adj=1) et positionné sur les lignes 0 et 2. Remarque : Les valeurs de adj comprises entre 0 et 1 donnent des alignements sur la zone définie par les marges intérieures : cas du texte situé sur la marge haute de la Figure 1.2. Une valeur négative (ou supérieure à 1), décale l alignement vers la gauche (ou vers la droite) : cas du texte situé sur la marge droite de la Figure 1.2. Remarque : La fonction plot.new(), permet d initier une fenêtre Graphique. En effet, la fonction mtext() ne peut être utilisée que si cette fenêtre existe. Exemple 2 : Écrire dans les marges intérieures. La Figure 1.3, page suivante, donne un exemple d écriture dans les marges intérieures. Le graphique donne l évolution de la température moyenne mensuelle pour l année 2009 sur le site INRA de Bretenière. Les température sont données en C et les mois sont numérotés de 1 (Janvier) à 12 (Décembre). On utilise la marge haute pour indiquer «en clair», le nom du mois et, pour éviter les chevauchements, on n indique qu un mois sur 2. Pour cela on a utilisé l argument at qui positionne le texte aux valeurs des graduations de l échelle de la zone de données (ici l échelle de abscisses). Remarque : Les marges intérieures sont utilisées pour afficher des informations relatives au graphique produit dans la zone de données. On va trouver dans ces marges, la définition des axes (graduations et échelle) et leur nom. On trouve aussi le titre et le sous titre. Remarque : On peut enrichir le texte affiché. Sur la Figure, le titre est mis en gras. 3
Température 2009 Temp2009 0 5 10 15 20 Jan Mar Mai Jui Sep Nov Code R simplifié par(oma=rep(3,4)) plot(mois,temp2009,type="b",pch=21, main="température 2009") mtext(c("jan","mar","mai","jui","sep","nov"), side=3,line=0,at=c(1,3,5,7,9,11)) 2 4 6 8 10 12 Mois FIGURE 1.3 Écrire dans les marges intérieures : utilisation de la fonction mtext(). Position et ajustement du texte 1.2 Écrire dans la zone de données 1.2.1 La fonction text() L écriture de texte dans la zone de données se fait avec la fonction text(). Cette fonction va positionner dans la zone de données, une chaine de caractères ou une expression. Elle possède plusieurs arguments x= un vecteur numérique donnant la (les) coordonnée(s) du (des) texte(s) sur l axe des abscisses. Les coordonnées sont données dans les unités de l axe. y=null un vecteur numérique donnant la (les) coordonnée(s) du (des) texte(s) sur l axe des ordonnées. Les coordonnées sont données dans les unités de l axe. labels= un vecteur de type alphanumérique donnant le(s) texte(s) à placer. adj=null un vecteur donnant la position du texte selon un système de coordonnées compris entre 0 et 1 avec la valeur 0 située à gauche ou en bas de la zone de données. pos=null une valeur précisant la position du texte par rapport aux coordonnées x et y : 1=au dessous ; 2=à gauche ; 3= au dessus ; 4= à droite. offset=0.5 indique, lorsque l argument pos est utilisé, l écart entre le point de coordonnées (x,y) et le texte. vfont= la famille de la fonte utilisée ou un vecteur à 2 éléments spécifiant l utilisation des fontes Hershey. Remarque : Contrairement aux marges, le positionnement dans la zone de données, se fait en donnant des coordonnées dans l échelle des données (et pas un n o de ligne). En plus de ces arguments, on peut aussi utiliser des arguments plus généraux, comme : cex=na une valeur numérique qui permet d augmenter/réduire la taille des caractères col=na couleur du texte font=na la fonte utilisée 4
Utilisation de adj= Code R simplifié par(oma=rep(0,4),mar=rep(0,4),bg="white") pangramme <- c("portez ce vieux whisky au juge blond qui fume") text(0.5,1,labels="utilisation de adj=",cex=1.5) Utilisation de pos= text(x=0.5,y=0.9,labels=pangramme,adj=c(0,0),cex=0.9) text(x=0.5,y=0.8,labels=pangramme,adj=c(1,0),cex=0.9) text(x=0.5,y=0.7,labels=pangramme,adj=c(0,1),cex=0.9) text(x=0.5,y=0.6,labels=pangramme,adj=c(1,1),cex=0.9) text(0.5,0.5,labels="utilisation de pos=",cex=1.5) text(x=0.5,y=0.4,labels=pangramme,pos=1,cex=0.9) text(x=0.5,y=0.3,labels=pangramme,pos=2,cex=0.9) text(x=0.5,y=0.2,labels=pangramme,pos=3,cex=0.9) text(x=0.5,y=0.1,labels=pangramme,pos=4,cex=0.9) FIGURE 1.4 Écrire dans la zone de données : utilisation de la fonction text(). Position et ajustement du texte 1.2.2 Exemple Exemple 3 : Écrire dans la zone de données. La Figure 1.4, de la présente page, donne un exemple d écriture dans la zone de données. On utilise successivement les arguments adj et pos pour positionner le texte par rapport au point de coordonnées (x, y). Ce point est symbolisé sur la figure par une croix rouge. Les couples de valeurs utilisés pour adj sont : c(0,0) c(1,0) c(0,1) c(1,1) positionnement au dessus et à droite positionnement au dessus et à gauche positionnement au dessous et à droite positionnement au dessous et à gauche et les valeurs de pos vont de 1 à 4. 1.3 Enrichir le texte 1.3.1 La fonction paste() Cette fonction permet de concaténer des chaines de caractères pour former une expression. Cette fonction possède 3 arguments :... la ou les chaines de caractères que l on veut concaténer. sep=" " un caractère permettant de séparer les différents élément à concaténer. Par défaut, le séparateur est un blanc. collapse=null un caractère permettant de séparer les résultats. Exemple : On a deux objets R. Le premier est un vecteur alphanumérique : c("a","b","c"). Le second est un vecteur numérique contenant les chiffres 1,2,3. Lorsque l objet n est pas de type «caractère», R essaie de le transformer avant de l utiliser. Selon le type de résultat souhaité, on va utiliser les différents arguments. 5
Dans ce le premier cas, on cherche à obtenir un vecteur à 3 éléments : chaque élément étant le résultat de la concaténation, élément par élément, des 2 vecteurs. Par défaut, le caractère de séparation des éléments est le blanc. On peut le modifier avec l argument sep. paste(c("a","b","c"),1:3,sep="-") [1] "A-1" "B-2" "C-3" Ici, on cherche à concaténer les éléments d un vecteur de façon à obtenir une expression unique. Contrairement à l exemple précédent, le résultat est une unique chaine de caractères. On doit spécifier le caractère de séparation des éléments dans la chaine avec l argument collapse. paste(c("a","b","c"),collapse=":") [1] "A:B:C" Dans ce troisième cas, on veut d abord concaténer les différents éléments des 2 vecteurs (comme dans le premier cas) puis en faire une chaine unique (comme dans le second cas). On va utiliser les deux arguments vus précédemment. paste(c("a","b","c"),1:3,sep="-",collapse=":") [1] "A-1:B-2:C-3" 1.3.2 La fonction expression() Cette fonction permet, entre autre, de créer des chaines de caractères comportant différents types d enrichissement. Le Tableau1.1 donne quelques commandes permettant d obtenir différents effets. Ces commandes sont utilisables dans les différentes zones de la fenêtre Graphique. Par exemple, pour obtenir un texte en italique, on utilisera mtext(expression(italic("distribution normale"))) et pour obtenir un texte souligné mtext(expression(underline("distribution normale"))) Enfin, on peut obtenir les lettres grecques, comme α, avec mtext(expression(symbol("a"))) Syntaxe Résultat plain(x) normal bold(x) gras italic(x) italique bolditalic(x) gras, italique underline(x) souligné symbol(x) dessine le symbol correspondant à x x[i] indice (x i ) xˆj exposant (x j ) TABLE 1.1 Syntaxe pour l utilisation de la fonction expression() : enrichissement du texte 6
1.3.3 La fonction bquote() Cette fonction recopie, sous forme d une chaine de caractères, l objet donné en argument. Si le texte contient le terme.(objet), le contenu, objet, entre les parenthèse est évalué et son résultat retourné. Cette fonction possède un argument complémentaire, where=parent.frame(), permettant de spécifier «l environnement» à retenir. Serie <- 1:10 bquote(moyenne== mean(serie)) Moyenne == mean(serie) Ici, le contenu de.(), mean(serie), est évalué et son résultat (5.5) retourné. bquote(moyenne==.(mean(serie))) Moyenne == 5.5 1.4 Exemple d application La Figure 1.5, page suivante, donne un exemple de ce qu il est possible de faire avec les fonctions présentées dans ce document. Le code est le suivant :. Code R 1 curve(dnorm,from=-4,to=4,lwd=2,axes=false,ann=false) 2 box() 3 # Titre 4 mtext((expression(italic("distribution normale"))),side=3,line=2,cex=2) 5 # Axe des ordonnées 6 mtext(rep("-",5),side=2,line=0,at=seq(0,0.4,0.1),cex=1.5,las=2) 7 mtext(seq(0,0.4,0.1),side=2,line=1,at=seq(0,0.4,0.1)) 8 mtext("f(y)",side=2,line=3) 9 # Axe des abscisses 10 mtext("y",side=1,line=3) 11 mtext(rep("-",9),side=1,line=0,at=seq(-4,4,1),cex=1.5,las=2) 12 mtext(expression(-4*sigma,-2*sigma,mu,2*sigma,4*sigma),side=1,line=1,at=c(-4,-2,0,2,4),adj=c(0.5,0.5)) 13 #Fonction 14 text(x=-4,y=0.35,cex=1.25,pos=4, 15 labels=expression(f(y)==frac(1,sqrt(2*pi*sigma^2))* e^frac(-(y-mu)^2,2*sigma^2))) En ligne n o 1, on trace la courbe. C est celle d une distribution normale. On demande volontairement la suppression du tracer des axes et de leur nom. En ligne n o 2, on trace un rectangle autour de la zone de données. Les lignes n o 3, n o 5, n o 9 et n o 13 commencent par # : ce sont des lignes de commentaire. En ligne n o 4, on écrit le titre de la figure. Ce titre est dans la marge intérieure haute et il est composé en italique. En lignes n o 6, n o 7, n o 8, on trace l axe des ordonnées. D abord les graduations, puis l échelle et enfin le nom de l axe. Les lignes n o 10, n o 11, n o 12 font la même chose mais pour l axe des abscisses. Enfin, la commande des lignes n o 14 et n o 15 positionne et affiche la formule dans la zone de données. 7
Distribution normale f(y) 0 0.1 0.2 0.3 0.4 f(y) = 1 2e(yµ)2 2σ 2 2πσ 4σ 2σ µ 2σ 4σ y FIGURE 1.5 Exemple d application 8