ggplot2 th?mes et couleurs de fond : les 3 ?l?ments - Logiciel R et visualisation de donn?es


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 programmingggplot2 background color, theme_void and theme_dark, R programming

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

  1. 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


  1. 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 programmingggplot2 background color, remove plot panel border, remove grid lines, R programming

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

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

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

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

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

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

ggplot2 theme_hc et logiciel R

Cr?? un th?me personnalis?

  1. 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))
  1. 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)


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

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!





Cette page a été vue 16308 fois
Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
Licence Creative Commons