Cet article décrit comment créer un diagramme circulaire (ou pie chart) et un donut chart en utilisant le package R ggplot2. Le diagramme circulaire n’est qu’un diagramme à barres empilées en coordonnées polaires.
La fonction coord_polar()
est utilisée pour produire un pie chart à partir d’un bar plot.
Sommaire:
Livre Apparenté
GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans RPrérequis
Charger les packages requis
library("ggplot2") # Visualisation des données
library("dplyr") # Manipulation des données
Préparation des données
- Créer un jeu de données comptant les passages du Titanic:
count.data <- data.frame(
class = c("1st", "2nd", "3rd", "Crew"),
n = c(325, 285, 706, 885),
prop = c(14.8, 12.9, 32.1, 40.2)
)
count.data
## class n prop
## 1 1st 325 14.8
## 2 2nd 285 12.9
## 3 3rd 706 32.1
## 4 Crew 885 40.2
- Calculez la position des étiquettes de texte comme étant la somme cumulée de la proportion:
- Trier la variable de regroupement (
class
) par ordre décroissant. Ceci est important pour calculer les coordonnées y des étiquettes. - Pour placer les étiquettes au centre des tranches, nous utiliserons
cumsum(prop) - 0.5*prop
comme position des étiquettes.
# Ajouter la position de l'étiquette
count.data <- count.data %>%
arrange(desc(class)) %>%
mutate(lab.ypos = cumsum(prop) - 0.5*prop)
count.data
## class n prop lab.ypos
## 1 Crew 885 40.2 20.1
## 2 3rd 706 32.1 56.3
## 3 2nd 285 12.9 78.8
## 4 1st 325 14.8 92.6
Pie chart
- Créez les camemberts à l’aide des fonctions ggplot2. Fonction clé:
geom_bar()
+coord_polar()
. - Ajouter des étiquettes de texte:
geom_text()
- Changer la couleur de remplissage manuellement:
scale_color_manual()
- Appliquer
theme_void()
pour supprimer les axes, l’arrière-plan, etc
mycols <- c("#0073C2FF", "#EFC000FF", "#868686FF", "#CD534CFF")
ggplot(count.data, aes(x = "", y = prop, fill = class)) +
geom_bar(width = 1, stat = "identity", color = "white") +
coord_polar("y", start = 0)+
geom_text(aes(y = lab.ypos, label = prop), color = "white")+
scale_fill_manual(values = mycols) +
theme_void()
Donut chart
Le donut chart n’est qu’un simple diagramme circulaire avec un trou à l’intérieur.
La seule différence entre le code du camembert est que nous avons défini : x = 2
and xlim = c(0.5, 2.5)
pour créer le trou à l’intérieur du camembert. De plus, l’argument width
dans la fonction geom_bar()
n’est plus nécessaire.
ggplot(count.data, aes(x = 2, y = prop, fill = class)) +
geom_bar(stat = "identity", color = "white") +
coord_polar(theta = "y", start = 0)+
geom_text(aes(y = lab.ypos, label = prop), color = "white")+
scale_fill_manual(values = mycols) +
theme_void()+
xlim(0.5, 2.5)
Version: English
Bonjour,
Je ne comprends pas pourquoi doit-on trier le tableau (arrange(desc(classe)) par rapport à la classe qui n’est qu’une chaine de caractère pour pouvoir placer les étiquettes sur le camembert .