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
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()- 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 titleChanger 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