This book is in Open Review. I want your feedback to make the book better for you and other readers. To add your annotation, select some text and then click the on the pop-up menu. To see the annotations of others, click the in the upper right hand corner of the page

Cours 11 Theme

  • fond blanc avec lignes sans cadre : theme_minimal() +
  • fond blanc sans lignes : theme_classic() +

11.1 Types

  • geom_point()
  • geom_line()
  • geom_bar()
  • geom_histogram(binwidth=1, fill=“#69b3a2”, color=“#e9ecef”, alpha=0.9)
  • geom_boxplot()
  • heatmap : ggplot(data, aes(x, y)) + geom_tile() + # heatmap geom_bin2d(bins = 50) # for counts
# Points from different variables of the same dataset
ggplot(data, aes(x = x)) +
  geom_point(aes(y = y1), color = "blue") +  
  geom_point(aes(y = y2), color = "red")

11.2 Titres

  • Titre de la figure et noms des axes : labs(title=“Figure title”, x =“x title”, y = “y title”) ou ggtitle(“Figure title”)

11.3 Des couleurs

Voir les palettes : RColorBrewer::display.brewer.all()
Voir palettes from ggsci R package

  • Couleurs colorblind (daltonien) friendly : RColorBrewer::display.brewer.all(colorblindFriendly = TRUE)
library(colorBlindness)
availableColors()
c("black", "#000000","#999999", "skyBlue","bluishGreen","blue", "#0072B2","#56B4E9", 
  "#009E73","#D55E00", "#CC79A7","vermillion", "reddishPurple","#E69F00","orange","#F0E442", "yellow") 

colorblindPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

availablePalette()
# les couleurs que j'aime
c("#00AFBB", "#E7B800", "#FC4E07", "steelblue")
  • attribuer une couleur à chaque level
scale_color_manual(values = c("1-5" = "#00AFBB",
                              "5-10"= "#CC79A7",
                              "10-20"= "#E7B800",
                              ">20" = "#FC4E07")) + 
  • Gradient de couleurs : colorRampPalette(c(“blue”, “white”, “red”))(4) 4 = nbr de catégories
    ou scale_fill_gradient2(name = “LegendTitle”, low=“blue”, high=“red”, mid = “white”, midpoint = 0)

  • Couleur pour des paliers :

+ scale_colour_steps2(name = "Title",
                      low="#00AFBB", high="#FC4E07", mid = "white", midpoint = 0,
                      breaks = seq(min(var), max(var), by = 0.02),
                      labels = as.character(round(seq(min(var), max(var), by = 0.02), digits = 2)))
  • utiliser une palette, donner un nombre de couleur et inverser la palette : scale_fill_gradientn(name = “Altitude”, colors = terrain.colors(45, rev=T)) # rev = T pour inverser la palette

ou scale_color_gradientn() pour des points (ne pas mettre fill = mais color =)

  • n’importe quelle palette : scale_fill_gradientn(name = “TWI”, colors = hcl.colors(12, “nom de la pallette”, rev = T))

  • limites au gradient de couleur : , limits = c(0,0.25)

11.4 Des histoires de texte

  • geom_text(data = data, aes(x = x, y = y, label = Id))
  • Relier le label au point quand c’est pas visible : ggrepel::geom_text_repel(data = data, aes(x = x, y = y, label = Id), color = “black”, size = 2)
  • Si positions varient selon une variable : créer un dataset avec : label <- data.frame( var_x = 4, var_y = c(0.08, 0.075, 0.07), color = unique(long\(LIDF), label = paste("MAE = ",round(unique(long\)MAE),3)) )
  • geom_text(data = label, aes(label = label), show.legend = F) +

11.5 Axes

https://r-charts.com/ggplot2/axis/

  • Titre de la figure et noms des axes : labs(title=“Figure title”, x =“x title”, y = “y title”)
  • changer l’échelle des axes (ici y): scale_y_continuous(limits = c(0, 100), breaks = c(0, 50, 100)) pour un facet_wrap :

ggh4x::facetted_pos_scales( x = list( Transect == “LAY” ~ scale_x_continuous(breaks = seq(1:26)), Transect == “HOBO” ~ scale_x_continuous(breaks = seq(1:20)) ) ) +

  • pour arrondir les valeurs des axes : scale_y_continuous(labels = scales::number_format(accuracy = 0.001))

  • pour transformer l’axe : scale_y_continuous(trans=“log”)

  • pour les factor et character : scale_x_discrete(limits = as.character(seq(1, 48, by= 5))) ou breaks

  • axe de meme longeur : coord_fixed(ratio=1)

  • limites des axes : xlim(0,1) + ; ylim(0,60) +

  • changer taille des titres, valeurs des axes et légende : theme(text = element_text(size = 20)) ou theme(title= element_text(size=16), axis.title= element_text(size=14), axis.text= element_text(size=16), legend.title= element_text(size=16), legend.text= element_text(size=16), strip.text.x = element_text(size=16)) + ,face=“bold” si en gras

  • changer la couleur que du titre : theme(plot.title = element_text(colour = “red”))

  • Rotation des labels : theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, size=7)) +

11.5.1 Temporel

  • customiser l’échelle d’un axe temporel (date/time) : https://ggplot2.tidyverse.org/reference/scale_date.html#ref-examples

  • un plot avec l’axe des x à échelle temporelle de toutes :

  • les 15 minutes : + scale_x_time(breaks = hms::hms(minutes = seq(0, 3600, 15)))

  • les semaines : + scale_x_date(date_breaks = “1 week”)

  • mois : +scale_x_date(breaks = scales::breaks_width(“1 month”), date_labels = “%d-%m”)

  • les 4 heures : + scale_x_time(breaks = hms::hms(hours = seq(0, 24, 4)))

11.5.2 Double axes

mean(Df1$Light/Df1$Temp) # find a good coeff
coeff <- 2
ggplot(Df1, aes(x = Date)) +
  geom_line(aes(y = Temp), col = "red") +
  geom_line(aes(y = Light/coeff), linewidth = 2) +
  scale_y_continuous(
    # Features of the first axis
    name = "Temperature (°C)",
    # Add a second axis and specify its features
    sec.axis = sec_axis(~.*coeff, name="Light (lux)")
  ) +
  theme(
    axis.title.y = element_text(color = "red"),
    axis.title.y.right = element_text(color = "orange")
  ) 

11.6 Multi-plots

  • par(mfrow = c(2,2)) 2 lignes et 2 colonnes

  • Pour coller des plots de différentes natures : devtools::install_github(“thomasp85/patchwork”)

  • Pour pouvoir faire un facet_wrap (plsrs graphs en 1 figure), il est plus aisé de transformer sa table de ‘Wide-format’ à ‘long-format’ (https://seananderson.ca/2013/10/19/reshape/): melt()

  • facet avec 2 variables : facet_wrap(~ var1 + var2)

  • Séparer un facet_wrap en plusieurs pages : facet_wrap_paginate()

  • Echelles différentes sur un facet :

  • scales = “free” “free_x” “free_y” or “fixed”

  • qd on veut personnaliser :
    on crée un data pour un geom_blank : blank_data <- data.frame(group = c(“var1”, “var1”, “var2”, “var2”), x = c(min commun,
    max commun, min commun, max commun), y = c(min commun, max commun, min commun, max commun))

puis geom_blank(data = blank_data, aes(x = x, y = y))

  • Plusieurs graphiques sur une même page : ggpubr::ggarrange(plot1, plot2, labels = c(“A”, “B”), ncol = 1, nrow = 2)

11.7 Légende

geom_point(shape = "circle", size = 1.5,
           aes(colour = "Reality")) +
  geom_point(data = Piquets_theor, aes(x = X, y = Y, colour = "Expectation"), shape = "circle", size = 1.5) +
  scale_colour_manual(values = c("Reality" = "forestgreen", # pour donner un nom à chaque intitulé
                                 "Expectation" = "red"),
                      breaks=c("Reality", "Expectation")) + # pour ordonner
  labs(color = "Stakes position") # legend title
  • Changer le titre de la légende : labs(color= “title”)

  • pas de titre de légende : theme(legend.title=element_blank()) +

  • cacher certaines légendes : guides(color = FALSE, fill = FALSE)

  • pas la notation scientifique : , labels = scales::comma ou + scale_y_continuous(labels = scales::comma) ou options(scipen = 999)

  • Position de la légende : theme(legend.position=“bottom”)

  • Pour modifier la légende : guides(fill= guide_legend(title, theme, position, direction, override.aes = list(), nrow, ncol, reverse, order))

11.8 Ajouter des lignes

  • Pour ajouter une droite horizontale : abline(h=ordonnee) avec plot geom_hline(data, aes(yintercept=0, linetype=‘value’)) avec ggplot

  • Pour ajouter une droite verticale : abline(v=abscisse) avec plot geom_vline(xintercept = value) avec ggplot

  • Pour ajouter une droite x=y : geom_abline()

  • des segments entre des points et des limites : geom_segment(aes(x=x, xend=x, y=y, yend=0)) ici entre chaque point et une ligne à y=0

  • pour la légende : scale_linetype_manual(name = ““, values =”solid”)

  • et du texte : geom_text(data = data2, mapping = aes(x= x, y = y, label= as.character(var)), size = 3) # les colonnes de data1 et data2 impliqués dans le plot doivent etre communes