Les barres empilées avec R

Barres empilées avec R base et ggplot2

Les diagrammes à barres empilées permettent de représenter simultanément un total et sa composition. Ils sont particulièrement utiles lorsqu'on souhaite comparer plusieurs groupes tout en conservant le détail de leurs composantes.

Dans ce tutoriel, nous allons représenter les ventes trimestrielles de trois familles de produits à partir d'un fichier Excel, puis construire le même graphique avec les fonctions graphiques de base de R puis avec ggplot2.

 

Préparation des données

Supposons le fichier Excel ventes.xlsx qui contient les données suivantes :

Trimestre Informatique Téléphonie Accessoires
T1 120 80 40
T2 150 90 50
T3 130 110 60
T4 170 120 70

Pour l'importer dans R, nous utiliserons le package readxl :

library(readxl)

ventes <- read_excel("ventes.xlsx")

ventes

importé

 

Barres empilées avec R de base

La fonction barplot() attend une matrice dont les séries à empiler sont placées en lignes. Nous allons donc extraire les colonnes numériques puis les transposer.

mat <- t(as.matrix(ventes[, 2:4]))

mat

matrice

La syntaxe dataframe[, 2:4] est l'une des formes les plus courantes d'indexation en R. La partie située avant la virgule désigne les lignes, celle située après la virgule désigne les colonnes. Lorsqu'une partie est laissée vide, toutes les lignes ou toutes les colonnes sont sélectionnées.

Créons ensuite le graphique :

couleurs <- c("steelblue", "orange", "darkgreen")

barplot(
mat,
col = couleurs,
names.arg = ventes$Trimestre,
main = "Ventes trimestrielles",
xlab = "Trimestre",
ylab = "Montant des ventes",
legend.text = rownames(mat)
)

Ce n’est pas un chef d’œuvre, surtout en raison de l’emplacement de la légende ! Il faudrait retravailler ce graphique mais ce n’est pas notre sujet ici.

graphique

Conclusion : le code reste relativement compact, mais il faut préparer les données sous une forme particulière avant de pouvoir les représenter.

 

Barres empilées avec ggplot2

L'approche de ggplot2 est différente. Les données doivent être placées dans un format long : une colonne contient les catégories de produits et une autre les montants. Nous utiliserons tidyr.

library(tidyr)

ventes_long <- ventes |>
pivot_longer(
cols = Informatique:Accessoires,
names_to = "Produit",
values_to = "Ventes"
)

ventes_long

On obtient :

format long

Cette structure est idéale pour ggplot2.

Construction du graphique :

library(ggplot2)

ggplot(
ventes_long,
aes(
x = Trimestre,
y = Ventes,
fill = Produit
)
) +
geom_col() +
labs(
title = "Ventes trimestrielles",
x = "Trimestre",
y = "Montant des ventes",
fill = "Produit"
) +
theme_minimal()

Le graphique obtenu est similaire au précédent mais il présente un rendu plus attrayant et une légende mieux intégrée.

 

maki et ggplot2