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()
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"))
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()
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")
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")
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")
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")
theme_hc : th?me de types Highcharts JS
p + theme_hc()+ scale_colour_hc()
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!