5 minute read

R PLOT : point, fonction et grille

ANTOINE HAREL

Candidat à la maîtrise en sciences forestières antoine.harel.1@ulaval.ca

Advertisement

Cet article fait suite à un premier article publié dans l’édition précédente (janvier 2021) du Jaseur Boréal. Dans cet article, je vous ai présenté un script permettant de faire un graphique en boîte à moustache et de le personnaliser (choix des couleurs, police d’écriture, légende, titre des axes, etc.). Bon, j’ai amélioré ce script et j’ai découvert de nouvelles choses. Je vais donc vous partager un deuxième graphique avec le script en entier et quelques détails. Puis, je vais vous montrer comment faire des grilles de graphique.

[1] TITRE_1 <- expression('ln('*R[h0]*') = -0.033 + 0.105T + 0.001T'^2) [2] TITRE_2 <- expression(bold('Flux de '~CO['2']~ 'du sol ('*umol~m^'-2'~s^'-1'*')’)) [3] FUNCABC <- function(TEMP_MOY)(exp(-0.033 + 0.105 * TEMP_MOY + 0.001 * ((TEMP_MOY^2))) [4] PLOT <- ggplot(data = DATA_BRUTE) + [5] geom_point(mapping = aes(x = TEMP_MOY, y = FLUX), size = 1, alpha = 0.25, colour = "#000000") + [6] stat_function(fun = FUNCABC, size = 1.5, linetype = 1, colour = "#000000", xlim = c(2,30)) + [7] scale_x_continuous(breaks=seq(0,15,2), labels=seq(0,15,2), limits = c(0,15)) + [8] scale_y_continuous(breaks=seq(0,8,1), labels=seq(0,8,1), limits = c(0,8)) + [9] labs(title = "Relation entre le flux hétérotrophe et la température du sol", [10] subtitle = "Antoine Harel, 23 mars", [11] caption = TITRE_1, [12] y = TITRE_2, [13] x = "Température du sol (10 cm) °C") +

[14] theme_few() + [15] theme( [16] plot.title = element_text(family ="Arial", size =17, face ="bold", hjust = 0.5), [17] plot.subtitle = element_text(family ="Arial", size =12, face ="plain", hjust = 0), [18] plot.caption = element_text(family ="Arial", size =17, face ="plain", hjust = 1, vjust = 0), [19] axis.title.x = element_text(family ="Arial", size =18, face ="bold"), [20] axis.title.y = element_text(family ="Arial", size =18, face ="bold"), [21] legend.title = element_text(family ="Arial", size =13, face ="bold"), [22] legend.text = element_text(family ="Arial", size =12, face ="plain"), [23] panel.background = element_rect(fill = "#ffffff", colour = "#ffffff"), [24] plot.background = element_rect(fill = "#ffffff", colour = "#ffffff"), [25] strip.background = element_rect(fill = "#ffffff", colour = "#ffffff"), [26] legend.background = element_rect(fill = "#ffffff", colour = "#000000", size = 0, linetype = 1), [27] legend.key = element_rect(fill="#ffffff"), [28] legend.margin = margin(0, 0, 0, 0), [29] legend.box.margin = margin(0, 0, 0, 0), [30] legend.box.spacing = unit(0.25, 'cm'), [31] panel.border= element_rect(linetype = 1, size=1.5), [32] panel.grid.major.y = element_line(colour="#000000", linetype = 3, size = 0.5), [33] panel.grid.major.x = element_blank(), [34] legend.position = NULL, [35] legend.direction = NULL, [36] legend.key.size = unit(2, 'lines'), [37] legend.spacing.x = unit(0.3, 'cm’), [38] plot.margin = unit(c(0.1, 0.1, 0.1, 0.1), "cm"), [39] axis.line.x.top = element_line(linetype = 1, size=0), [40] axis.line.x.bottom = element_line(linetype = 1, size=0), [41] axis.line.y.left = element_line(linetype = 1, size=0), [42] axis.line.y.right = element_line(linetype = 1, size=0)) + [43] guides(fill = FALSE)

[1] et [2] : Le titre de mon axe des Y et la caption (texte en bas) comportent des éléments numériques en exposant ou en indice. Afin d’avoir ces chiffres en exposant ou en indice, il faut stocker le texte dans un objet (« TITRE_1 » et « TITRE_2 ») à l’aide de la commande expression(). J’ai utilisé expression(bold()) pour avoir tout le texte en gras. Pour aussi avoir les chiffres en exposant ou en indice, il faut que ces valeurs soient placées entre guillemets « ' ' ». Le texte doit être entre guillemets « ' ' ». Entre le texte et les valeurs, le signe « ~ » ou « * » est utilisé pour avoir un espace, ou pas, respectivement. Merci à Gabriel Landry pour le tip. Une fois que votre texte est stocké dans l’objet, il suffit d’indiquer le nom de l’objet à la ligne correspondante [9] à [13]. S’il n’y a pas de valeur en exposant ou en indice, contentez-vous de faire comme dans la ligne [10] ou [13]. [4] geom_point() permet d’afficher des valeurs ponctuelles sur le graphique. J’ai utilisé alpha = 0.25 pour rendre les points transparents (la valeur varie entre 1 (pas transparent) et 0 (tellement transparent que les points ne s’affichent plus)). [5] stat_function() permet d’afficher une fonction. Pour cela, il faut que la fonction ait été stockée dans un objet. Je l’ai fait à la ligne [3] à l’aide de la commande function(). « TEMP_MOY » c’est ma valeur de l’axe des X de mon graphique.

[7] et [8] scale_x_continuous() et scale_y_continuous() permettent de définir les graduations des axes X et Y. Dans les deux cas, il faut que breaks= et labels= aient les mêmes valeurs. J’ai utilisé la commande seq(valeur 1, valeur 2, valeur 3) pour définir la graduation : valeur 1 = valeur minimale de la graduation, valeur 2 = valeur maximale de la graduation et valeur 3 = l’intervalle entre chaque unité. limits = c() permet de définir les valeurs minimales de l’axe (par exemple, pour l’axe des X, la graduation arrête à 14, mais le graphique affiche des données jusqu’à X = 15). [16] [17] [18] [19] [20] permettent de définir la police/taille, etc. du titre et du caption du graphique et des titres des axes X et Y. vjust= et hjust= permet de définir la position verticale et horizontale respectivement. Pour le titre, j’ai mis hjust=0.5 pour que le titre soit centré (0 = gauche et 1 = droite). Pour le reste des lignes de codes, vous pouvez aller voir les explications dans l’article de l’édition janvier – 2021 du Jaseur Boréal. Sinon, dans R, vous pouvez placer votre curseur dans la commande qui vous intéresse et appuyer sur la touche F1 pour plus d’explications. Sinon, internet est votre meilleur ami ! Vous pouvez copier-coller le script et l’utiliser / modifier à votre guise.

Vous allez surement être amenés à faire plusieurs graphiques que vous voudrez présenter sous forme de grille. Voici comme exemple un graphique des données climatiques de la Forêt Montmorency. Voici rapidement comment faire :

Vous aurez besoin du package « cowplot » Vos graphiques devront être stockés dans un objet (comme j’ai fait à la ligne [4] du script précédent). Voici le nom des trois graphiques pour simplifier : A1 : graphique des températures moyennes journalières A2 : graphique des précipitations totales journalières A3 : graphique de la hauteur de neige Dans mon exemple,A1 prend toute la partie supérieure etA2 /A3 sont juxtaposés dans la partie inférieure.

Pour faire simple, j’aurais pu utiliser les commandes suivantes et j’aurais obtenu A1, A2 et A3 de la même taille dans une grille de 2 graphiques par 2 graphiques.

Pour faire comme dans l’exemple, j’ai commencé par juxtaposer horizontalement A2 et A3 (le graphique obtenu s’appelle «A2_A3 »). Puis, j’ai juxtaposé verticalement le graphiqueA1 etA2_A3.

Donc, comme vous vous en doutez, dans la commande plot_grid(), ncol= et nrow= définissent le nombre de colonnes et de lignes respectivement.

Il est possible d’aller plus loin : légende commune ou titre des axes communs à tous les graphiques. Vous trouverez des exemples sur internet.

PLOT<- plot_grid(A1, A2, A3, ncol = 2, nrow = 2)

A2_A3 <- plot_grid(A2, A3, ncol = 2, nrow = 1) PLOT <- plot_grid(A1, A2_A3, ncol = 1, nrow = 2)