Comment créer un Camembert dans R en utilisant GGPLot2



Comment créer un Camembert dans R en utilisant GGPLot2

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 R

Prérequis

Charger les packages requis

library("ggplot2")  # Visualisation des données
library("dplyr")    # Manipulation des données

Préparation des données

  1. 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
  1. Calculez la position des étiquettes de texte comme étant la somme cumulée de la proportion:
  1. Trier la variable de regroupement (class) par ordre décroissant. Ceci est important pour calculer les coordonnées y des étiquettes.
  2. 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





Comment ( 1 )

  • Bob bob

    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 .

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments