Pour ajuster le thème et la mise en page, on dispose de la fonction theme(), qui possède une longue série d'arguments permettant d'agir sur pratiquement tous les aspects de la mise en page et du thème. Il existe en outre des thèmes prêts à l'emploi, comme theme_bw(), qui confèrent au graphique un style particulier. Utiliser un thème prêt à l'emploi (par exemple theme_bw()) implique en général qu'il faut effectuer moins d'ajustements manuels.
Ajuster le thème n'est pas nécessaire pour l'exploration des données. Il convient en revanche de le faire lors de la présentation, afin d'optimiser le résultat final. La plupart des professionnels travaillent avec un petit nombre de types de visualisations ; il est donc judicieux d'investir du temps dans l'élaboration de thèmes adaptés.
Dans ce chapitre, nous travaillons avec les données gapminder, disponibles dans le package du même nom. Chargez gapminder avec le code suivant :
library(gapminder)
## Inspecter les 5 premières lignes
head(gapminder)| country <fctr> | continent <fctr> | year <int> | lifeExp <dbl> | pop <int> | gdpPercap <dbl> |
|---|---|---|---|---|---|
| Afghanistan | Asia | 1952 | 28.801 | 8425333 | 779.4453 |
| Afghanistan | Asia | 1957 | 30.332 | 9240934 | 820.8530 |
| Afghanistan | Asia | 1962 | 31.997 | 10267083 | 853.1007 |
| Afghanistan | Asia | 1967 | 34.020 | 11537966 | 836.1971 |
| Afghanistan | Asia | 1972 | 36.088 | 13079460 | 739.9811 |
| Afghanistan | Asia | 1977 | 38.438 | 14880372 | 786.1134 |
Gapminder
Nous commençons par un graphique sans aucun ajustement du thème (notez que nous prenons le logarithme de pop et de lifeExp afin que le graphique soit plus lisible) :
ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()
Nous allons maintenant modifier ce thème en présentant 8 thèmes complets. Pour écrire un code efficace, nous allons donc créer un objet (base_plot) contenant le graphique ci-dessus :
base_plot <- ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()Nous ajoutons maintenant des thèmes à base_plot. Nous ajoutons également un titre afin que le graphique indique quel thème a été utilisé (voir ci-dessous).
base_plot +
labs(title="Theme Background White (theme_bw)") +
theme_bw()
base_plot +
labs(title="Theme Classic (theme_classic)") +
theme_classic()
base_plot +
labs(title="Theme Minimal (theme_minimal)") +
theme_minimal()
base_plot +
labs(title="Theme Grey (theme_grey)") +
theme_minimal()
base_plot +
labs(title="Theme Linedraw (theme_linedraw)") +
theme_linedraw()
base_plot +
labs(title="Theme Dark (theme_dark)") +
theme_dark()
base_plot
labs(title="Theme Light (theme_light)") +
theme_light()
base_plot +
labs(title="Theme Void (theme_void)") +
theme_void()







Ggthemes
Le package ggthemes (https://jrnold.github.io/ggthemes/) contient encore davantage de themes, scales et geoms complets pour ggplot2. ggthemes offre plus d'options que tout autre package existant. On y trouve en outre des options spécialement conçues pour la recherche, la publication scientifique, le daltonisme, des revues spécifiques, des applications, etc. Installez le package avec la commande suivante :
install.packages("ggthemes")
library(ggthemes)Essayons un thème prêt à l'emploi inspiré du Wall Street Journal :
base_plot +
labs(title="Theme Wall Street Journal") +
theme_wsj()
Ajuster des éléments spécifiques
Tous les exemples ci-dessus étaient des thèmes prêts à l'emploi qui modifient de nombreux éléments simultanément. Vous pouvez modifier pratiquement tous les éléments du thème à l'aide de theme(). Cette fonction accepte un grand nombre d'éléments qui disposent de fonctions d'éléments. Par exemple, l'élément title sert à ajuster tous les titres. Comme les titres sont du texte, leur fonction d'élément est element_text(). Dans element_text(), nous pouvons par exemple modifier la taille et la couleur des titres avec le code suivant :
title = element_text(size=12, color="purple")
Dans le graphique, cela donne ceci :
base_plot +
theme(title = element_text(size=15, color="gold1"))
theme(
line,
rect,
text,
title,
aspect.ratio,
axis.title,
axis.title.x,
axis.title.x.top,
axis.title.x.bottom,
axis.title.y,
axis.title.y.left,
axis.title.y.right,
axis.text,
axis.text.x,
axis.text.x.top,
axis.text.x.bottom,
axis.text.y,
axis.text.y.left,
axis.text.y.right,
axis.ticks,
axis.ticks.x,
axis.ticks.x.top,
axis.ticks.x.bottom,
axis.ticks.y,
axis.ticks.y.left,
axis.ticks.y.right,
axis.ticks.length,
axis.ticks.length.x,
axis.ticks.length.x.top,
axis.ticks.length.x.bottom,
axis.ticks.length.y,
axis.ticks.length.y.left,
axis.ticks.length.y.right,
axis.line,
axis.line.x,
axis.line.x.top,
axis.line.x.bottom,
axis.line.y,
axis.line.y.left,
axis.line.y.right,
legend.background,
legend.margin,
legend.spacing,
legend.spacing.x,
legend.spacing.y,
legend.key,
legend.key.size,
legend.key.height,
legend.key.width,
legend.text,
legend.text.align,
legend.title,
legend.title.align,
legend.position,
legend.direction,
legend.justification,
legend.box,
legend.box.just,
legend.box.margin,
legend.box.background,
legend.box.spacing,
panel.background,
panel.border,
panel.spacing,
panel.spacing.x,
panel.spacing.y,
panel.grid,
panel.grid.major,
panel.grid.minor,
panel.grid.major.x,
panel.grid.major.y,
panel.grid.minor.x,
panel.grid.minor.y,
panel.ontop,
plot.background,
plot.title,
plot.title.position,
plot.subtitle,
plot.caption,
plot.caption.position,
plot.tag,
plot.tag.position,
plot.margin,
strip.background,
strip.background.x,
strip.background.y,
strip.clip,
strip.placement,
strip.text,
strip.text.x,
strip.text.y,
strip.switch.pad.grid,
strip.switch.pad.wrap,
)Fonctions d'éléments :

Ci-dessous, nous créons une figure avec des étiquettes (labs()) pour x, y et titel ; de nouvelles échelles pour x et y ; ainsi que l'ajustement d'un certain nombre d'éléments de theme().
base_plot +
# Modifie les étiquettes de x, y et du titre
labs(x="Population",
y="Life expectancy (years)",
title="Life expectancy and population size") +
# Modifie l'échelle de l'axe des x et de l'axe des y
scale_y_continuous(breaks=seq(3, 5, by=0.5),
limits=c(2, 5)) +
scale_x_continuous(breaks=seq(10, 20, by=1),
limits=c(10, 20)) +
# Ajuste le thème
theme(legend.text = element_text(color="brown4"),
legend.title = element_blank(),
legend.key = element_blank(),
panel.grid.major.x=element_line(color = "lightgoldenrod3",
size = 0.5,
linetype = 2),
panel.grid.minor.x=element_line(color = "palevioletred3",
size = 0.5,
linetype = 2),
plot.background = element_rect(fill="wheat3"))