ggplot2 thèmes et couleurs de fond : les 3 éléments - Logiciel R et visualisation de données
- Préparer les données
- Exemple de graphes
- Fonctions rapides pour changer le thème
- Personnaliser l’arrière plan du graphique
- Utiliser un thème personnalisé
- theme_tufte : un thème minimalist
- theme_economist : thème basé sur des graphiques de magazines economistes
- theme_stata: thème basé sur des graphiqes de types Stata
- theme_wsj: thème basé sur des graphiques de types Wall Street Journal
- theme_calc : thème de type LibreOffice Calc
- theme_hc : thème de types Highcharts JS
- Créé un thème personnalisé
- Infos
Ce tutoriel R décrit comment modifier l’apparence d’un thème graphique (couleur de fond, couleur du panneau de fond, lignes de la grille) en utilisant le logiciel R et le package ggplot2. Vous apprendrez également comment utiliser les thèmes de base de ggplot2 et comment créer votre propre thème.
Préparer les données
Le jeu de données ToothGrowth est utilisé dans les exemples ci-dessous :
# Convertir la variable dose de type "numeric" au type "factor"
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
head(ToothGrowth)
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
Assurez-vous que la variable dose soit convertie en une variable de type “factor” en utilisant le script de R ci-dessus.
Exemple de graphes
library(ggplot2)
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot()
p
Fonctions rapides pour changer le thème
Plusieurs fonctions sont disponibles dans le package ggplot2 pour changer rapidement le thème des graphes:
- theme_gray : couleur de fond grise et grille blanche
- theme_bw : couleur de fond blanche et grille grise
p + theme_gray(base_size = 14)
p + theme_bw()
- theme_linedraw: traits noirs autour du graphique
- theme_light: traits et axes légèrement gris (plus d’attention accordée aux données)
p + theme_linedraw()
p + theme_light()
- theme_minimal: pas de couleur de fond
- theme_classic : thème avec les traits des axes mais pas de grilles
p + theme_minimal()
p + theme_classic()
- theme_void: Thème vide, util pour des graphs avec des coordonnées non-standard ou pour dessiner
- theme_dark(): Thème avec un arrière plan noir, designé pour faire ressortir les couleurs.
p + theme_void()
p + theme_dark()


ggplot2 background color, theme_void and theme_dark, R programming
Les fonctions theme_xx() peuvent prendre les deux arguments ci-dessous:
- base_size : taille de base de la police (pour changer la taille de tous les éléments textuels sur le graphique)
- base_family : famille de police
La taille, de tous éléments textuels du graphe, peut être changée facilement en une seule fois :
# Exemple 1
theme_set(theme_gray(base_size = 20))
ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot()
# Exemple 2
ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot()+
theme_classic(base_size = 25)
Notez que, la fonction theme_set() modifie le thème pour toute la durée de la session.
Personnaliser l’arrière plan du graphique
La fonction theme() est utilisée pour contrôler les éléments graphiques incluant :
- Les éléments linéaires : traits des axes, traits des grilles mineur et majeur, bordure du panneau graphique, graduation des axes, couleurs de fond, etc.
- Les éléments textuels : titre du graphique et des axes, titre et textes de la légende, les étiquettes des graduations des axes, etc.
- Les éléments rectangualaires : arrière plan du graphique, du panneau et de la légende, etc.
Il existe une fonction spécifique pour modifier chacun de ces trois éléments:
- element_line() pour modifier les éléments linéaires du thème
- element_text() pour modifier les éléments textuels
- element_rect() pour changer l’apparence des éléments rectangulaires
Notez que, chacun de ces éléments de thème peut être supprimé avec la fonction element_blank()
Changer les couleurs de l’arrière plan du panneau et de la grille
- Les fonctions theme() et element_rect() sont utilisés pour modifier la couleur de fond du panneau :
p + theme(panel.background = element_rect(fill, colour, size,
linetype, color))
- fill : couleur de remplissage du rectangle
- colour, color : couleur de la bordure
- size : taille de la bordure
- L’apparence des traits de la grille peut être changée en utilisant la fonction element_line() comme suit :
# Changer les traits des grilles mineures et majeures
p + theme(
panel.grid.major = element_line(colour, size, linetype,
lineend, color),
panel.grid.minor = element_line(colour, size, linetype,
lineend, color)
)
- colour, color : couleur des traits
- size : épaisseur des traits
- linetype : Type de traits. Le type de traits peut être spécifié en utilisant soit du texte (“blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, “twodash”) ou un nombre (0, 1, 2, 3, 4, 5, 6). Notez que linetype = “solid” est identique à linetype=1. Les types de traits disponibles dans R sont décrits ici: Types de traits dans R
- lineend : terminaison du trait. Les valeurs possibles sont: “round”, “butt” ou “square”
Le code de R ci-dessous illustre comment modifier l’apparence du fond du panneau graphique et de la grille:
# Changer la couleur de fond du panneau en "lightblue"
# et la couleur des grilles en "white"
p + theme(
panel.background = element_rect(fill = "lightblue",
colour = "lightblue",
size = 0.5, linetype = "solid"),
panel.grid.major = element_line(size = 0.5, linetype = 'solid',
colour = "white"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
colour = "white")
)
Supprimer les bordures du panneau et les grilles
Il est possible de masquer les bordures du panneau graphique et les lignes de la grille avec la fonction element_blank() comme suit:
# Masquer les bordures et les lignes de la grille
p + theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
# Masquer les bordures et les lignes de la grille
# Modifier le trait des axes
p + theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(size = 0.5, linetype = "solid",
colour = "black"))


ggplot2 background color, remove plot panel border, remove grid lines, R programming
Changer la couleur de fond du graphique (pas le panneau)
p + theme(plot.background = element_rect(fill = "darkblue"))
Utiliser un thème personnalisé
Vous pouvez changer entièrement l’apparence d’un graphique en utilisant des thèmes personnalisés. Jeffrey Arnold a développé le package ggthemes contenant des thèmes personnalisés.
Pour utiliser ces thèmes installer et charger le package ggthemes comme suit:
install.packages("ggthemes") # Installer
library(ggthemes) # Charger
Le package ggthemes fournit de nombreux thèmes pour ggplot2.
theme_tufte : un thème minimalist
# Nuage de point
ggplot(mtcars, aes(wt, mpg)) +
geom_point() + geom_rangeframe() +
theme_tufte()

ggplot2 theme_tufte, logiciel R
theme_economist : thème basé sur des graphiques de magazines economistes
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width, colour = Species))+
geom_point()
# Utiliser l'échelle de couleurs économiste
p + theme_economist() +
scale_color_economist()+
ggtitle("Iris data sets")

ggplot2 theme_economist, logiciel R
Notez que la fonction scale_fill_economist() est aussi disponible (pour le remplissage des box plots, bar plots, …).
theme_stata: thème basé sur des graphiqes de types Stata
p + theme_stata() + scale_color_stata() +
ggtitle("Iris data")

ggplot2 theme_stata, logiciel R
Les échelles de couleurs stata peuvent être utilisées comme suit :
scale_fill_stata(scheme = "s2color", ...)
scale_color_stata(scheme = "s2color", ...)
Les valeurs possibles pour l’argument scheme sont “s2color”, “s1rcolor”, “s1color”, ou “mono”.
theme_wsj: thème basé sur des graphiques de types Wall Street Journal
p + theme_wsj()+ scale_colour_wsj("colors6")+
ggtitle("Iris data")

ggplot2 theme_wsj, logiciel R
Les échelles de couleurs de types Wall Street Journal sont :
scale_color_wsj(palette = "colors6", ...)
scale_fill_wsj(palette = "colors6", ...)
Les valeurs possibles pour l’argument palette sont: “rgby”, “red_green”, “black_green”, “dem_rep”, “colors6”.
theme_calc : thème de type LibreOffice Calc
p + theme_calc()+ scale_colour_calc()+
ggtitle("Iris data")

ggplot2 theme_calc, logiciel R
theme_hc : thème de types Highcharts JS
p + theme_hc()+ scale_colour_hc()

ggplot2 theme_hc et logiciel R
Créé un thème personnalisé
- Vous pouvez changer le thème pour la session R courante en utilisant la fonction theme_set() comme suit :
theme_set(theme_gray(base_size = 20))
- Vous pouvez extraire et modifier le code R du thème theme_gray :
theme_gray
function (base_size = 11, base_family = "")
{
half_line <- base_size/2
theme(
line = element_line(colour = "black", size = 0.5,
linetype = 1, lineend = "butt"),
rect = element_rect(fill = "white", colour = "black",
size = 0.5, linetype = 1),
text = element_text(family = base_family, face = "plain",
colour = "black", size = base_size,
lineheight = 0.9, hjust = 0.5,
vjust = 0.5, angle = 0,
margin = margin(), debug = FALSE),
axis.line = element_blank(),
axis.text = element_text(size = rel(0.8), colour = "grey30"),
axis.text.x = element_text(margin = margin(t = 0.8*half_line/2),
vjust = 1),
axis.text.y = element_text(margin = margin(r = 0.8*half_line/2),
hjust = 1),
axis.ticks = element_line(colour = "grey20"),
axis.ticks.length = unit(half_line/2, "pt"),
axis.title.x = element_text(margin = margin(t = 0.8 * half_line,
b = 0.8 * half_line/2)),
axis.title.y = element_text(angle = 90,
margin = margin(r = 0.8 * half_line,
l = 0.8 * half_line/2)),
legend.background = element_rect(colour = NA),
legend.margin = unit(0.2, "cm"),
legend.key = element_rect(fill = "grey95", colour = "white"),
legend.key.size = unit(1.2, "lines"),
legend.key.height = NULL,
legend.key.width = NULL,
legend.text = element_text(size = rel(0.8)),
legend.text.align = NULL,
legend.title = element_text(hjust = 0),
legend.title.align = NULL,
legend.position = "right",
legend.direction = NULL,
legend.justification = "center",
legend.box = NULL,
panel.background = element_rect(fill = "grey92", colour = NA),
panel.border = element_blank(),
panel.grid.major = element_line(colour = "white"),
panel.grid.minor = element_line(colour = "white", size = 0.25),
panel.margin = unit(half_line, "pt"), panel.margin.x = NULL,
panel.margin.y = NULL, panel.ontop = FALSE,
strip.background = element_rect(fill = "grey85", colour = NA),
strip.text = element_text(colour = "grey10", size = rel(0.8)),
strip.text.x = element_text(margin = margin(t = half_line,
b = half_line)),
strip.text.y = element_text(angle = -90,
margin = margin(l = half_line,
r = half_line)),
strip.switch.pad.grid = unit(0.1, "cm"),
strip.switch.pad.wrap = unit(0.1, "cm"),
plot.background = element_rect(colour = "white"),
plot.title = element_text(size = rel(1.2),
margin = margin(b = half_line * 1.2)),
plot.margin = margin(half_line, half_line, half_line, half_line),
complete = TRUE)
}
Notez que la fonction rel() modifie la taille de manière relative à la taille de base.
Infos
Cette analyse a été réalisée avec le logiciel R (ver. 3.2.4) et le package ggplot2 (ver. 2.1.0)
Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!